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

本文关键字:文件 设置 单元格 xlsx 编程 方式 创建 | 更新日期: 2023-09-27 18:22:04

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

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

sheet.Columns["D:D"].ColumnWidth = 17.57;

sheet.Columns[1].ColumnWidth = 17.57;

您可以在Excel中记录宏,然后查看生成的代码(对象模型相同)。

要自动将所有列宽设置为其内容的"正确大小",可以通过调用AutoFit来处理,如下所示:

_xlSheet.Columns.AutoFit();

然而,有时一列中的一两个"无赖"值会使该列超宽,您必须将该列向左拖动,以便查看更多数据。通过同时使用"自动调整",然后指定任何有问题的列的宽度,可以克服这一难题。以下是如何做到这一点的代码,它假设列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;

注意:作为一个额外的细节,您可以使用超长的内容换行(如果它们在Merged(多行)范围内,则特别有用),如下所示(其中"range"是您在填充列时定义的range):

range.WrapText = true;

注意:您需要添加Microsoft.Offie.Interop.Excel程序集,此代码才能工作。