如何设置以编程方式创建的xlsx文件中的单元格宽度?

时间:2012-01-31 12:46:52

标签: c# .net xlsx

我有这个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();

2 个答案:

答案 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程序集才能使用此代码。