我有这个C#代码将数据集转换为xlsx。有没有办法设置创建的xlsx文件的工作表的单元格或列宽?
//Get the filename
String filepath = args[0].ToString();
//Convert the file to dataset
DataSet ds = Convert(filepath.ToString(), "tblCustomers", "\t");
//Create the excell object
Excel.Application excel = new Excel.Application();
//Create the workbook
Excel.Workbook workBook = excel.Workbooks.Add();
//Set the active sheet
Excel.Worksheet sheet = workBook.ActiveSheet;
int i = 0;
foreach (DataRow row in ds.Tables[0].Rows)
{
for (int j = 0; j < row.ItemArray.Length; j++)
{
sheet.Cells[i + 1, j + 1] = row[j];
}
i++;
}
workBook.SaveAs(@"C:\fromCsv.xlsx");
workBook.Close();
答案 0 :(得分:7)
sheet.Columns["D:D"].ColumnWidth = 17.57;
或
sheet.Columns[1].ColumnWidth = 17.57;
您可以在Excel中录制宏,然后查看生成的代码(对象模型是相同的)。
答案 1 :(得分:1)
要自动将所有列宽设置为其内容的“正确大小”,您可以通过调用AutoFit来处理此问题,如下所示:
_xlSheet.Columns.AutoFit();
但是,有时列中的一个或两个“流氓”值会使该列超宽,并且您必须将列拖到左侧以便查看更多数据。您可以使用AutoFit同时克服此Catch-22,然后指定任何有问题列的宽度。以下是如何执行此操作的代码,它假定第1列是要控制的,第42行是您希望它采用的宽度:
private Worksheet _xlSheet;
private static readonly int ITEMDESC_COL = 1;
private static readonly int WIDTH_FOR_ITEM_DESC_COL = 42;
. . .
_xlSheet.Columns.AutoFit();
// Now take back the wider-than-the-ocean column
((Range)_xlSheet.Cells[ITEMDESC_COL, ITEMDESC_COL]).EntireColumn.ColumnWidth = WIDTH_FOR_ITEM_DESC_COL;
注意:作为一个额外的精确,您可以拥有过长的内容包装(如果它们处于合并(多行)范围内特别有用),这样(其中“范围”是您在填充时定义的范围列):
range.WrapText = true;
注意:您需要添加Microsoft.Offie.Interop.Excel程序集才能使用此代码。