首页 > 解决方案 > AutoSizeColumn 适用于所有列,但包含日期时间值的列除外

问题描述

我正在使用 NPOI 创建一个 Excel 文件。

我以这种方式声明工作表:

        var workbook = new XSSFWorkbook();
        var sheet = workbook.CreateSheet(title);

Excel 中填充了数据。相关部分是当我设置日期和时间值时:

                        if (data is DateTime)
                        {
                            cell.CellStyle = GetDateTimeStyle(workbook, true, GetCustomFormatForColumn(column));
                            cell.SetCellValue(Convert.ToDateTime(data));
                        }

其中细胞是ICell cell = row.CreateCell(column);GetDateTimeStyle方法是:

    private ICellStyle GetDateTimeStyle(XSSFWorkbook wb, bool useBorder, string customFormat)
    {
        if (!_styles.TryGetValue("DATETIME", out ICellStyle style))
        {
            style = wb.CreateCellStyle();
            style.SetFont(GetItemFont(wb));

            style.Alignment = HorizontalAlignment.Center;

            if (useBorder)
                SetBorder(style);

            if (!String.IsNullOrEmpty(customFormat))
                style.DataFormat = wb.CreateDataFormat().GetFormat(customFormat);
            else
                style.DataFormat = wb.CreateDataFormat().GetFormat("dd/MM/yyyy HH:mm:ss");

            _styles.Add("DATETIME", style);
        }

        return style;
    }

填充所有单元格后,我运行此for循环:

        column = 0;
        foreach (string header in columnNames)
            sheet.AutoSizeColumn(column++);

之后,生成的 Excel 将自动调整所有列,但列包含日期和时间值。

包含日期和时间值的单元格的宽度会扩大,但还有一些像素需要扩大,以便显示整个日期和时间,而不仅仅是#########.

有没有办法解决这个问题?

问候詹姆

标签: c#excelnpoi

解决方案


推荐阅读