【问题标题】:Issue with writing a date to Excel file using NPOI使用 NPOI 将日期写入 Excel 文件的问题
【发布时间】:2014-10-23 13:30:33
【问题描述】:

我目前正在使用 NPOI 根据我的 asp.net mvc 应用程序中的数据库生成 Excel 文件。我几乎完成了代码,除了在尝试将日期写入 Excel 时不断遇到的一个小问题。

在数据库(MS SQL Server)中,我将日期保存为 41883、41913 等...在 C# 中,我可以使用

将其转换为 DataTime 对象
DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883));

我用来将日期写入 Excel 的代码如下所示:

var cell = excelRow.CreateCell(columnIndex);
IDataFormat format = workbook.CreateDataFormat();
short dateFormat = format.GetFormat("dd/MM/yyyy");
cell.SetCellValue(DateTime.FromOADate(Convert.ToDouble(dbDateValue)));
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = dateFormat;
cell.CellStyle = cellStyle;

这只是我的代码示例(正在编写日期的部分)。 这段代码的问题在于,只有部分日期单元格实际上被格式化为日期,对于所有其他人,我仍然可以看到数据库中的值 41883、41913 等,当然我可以选择并应用短日期/ Excel 中的日期格式(但我不希望这样)。

谁能告诉我为什么会出现这种行为(格式化仅适用于部分单元格)...我什至尝试使用 HSSFDataFormat.GetBuiltinFormat("Date") 但没有一个单元格被格式化案例。

上面的图片更好地解释了我的问题......当我选择第一列中的第一个单元格时,我看到单元格被格式化为“自定义”......对于所有其他未格式化的值,它是通用的。选择单元格后,我可以毫无问题地将其格式化为 Excel 中的日期。这很奇怪,因为对所有日期单元格执行相同的代码,但只有一些得到正确的格式...

【问题讨论】:

  • 正好遇到了这个问题。想知道是否有解决方案......但是......
  • 好的,我知道出了什么问题。您可能正在为每个单元格创建一个新的单元格样式。由于大量相同的单元格样式,这以某种方式搞砸了。您只需为整个工作簿创建一个单元格样式,然后将该 ICellStyle 传递给单元格的 CellStyle 属性。
  • @StephenChung 感谢您的高度赞赏...我只是将所有代码更改为使用更少的 CellStyles(将其创建为第一种类型,然后继续使用它)。您应该将此评论作为答案。

标签: c# asp.net-mvc excel npoi hssf


【解决方案1】:

无需转换任何东西。 您必须创建一个样式并将其应用于您的单元格

        var newDataFormat = workbook.CreateDataFormat();
        var style = workbook.CreateCellStyle();
        style.BorderBottom = BorderStyle.Thin;
        style.BorderLeft = BorderStyle.Thin;
        style.BorderTop = BorderStyle.Thin;
        style.BorderRight = BorderStyle.Thin;
        style.DataFormat = newDataFormat.GetFormat("MM/dd/yyyy HH:mm:ss");

        foreach (var objArticles in tempArticles)
        {
            //Create a new Row
            var row = sheet.CreateRow(rowNumber++);

            //Set the Values for Cells
            row.CreateCell(0).SetCellValue(objArticles.ProjectId);
            row.CreateCell(1).SetCellValue(objArticles.ProjectName);
            row.CreateCell(2).SetCellValue(objArticles.MetricDescription);
            row.CreateCell(3).SetCellValue(objArticles.MetricValue);             
            var cell = row.CreateCell(4);
            cell.SetCellValue(objArticles.BuildDate);
            cell.CellStyle = style; 
            var cell5 = row.CreateCell(5);
            cell5.SetCellValue(objArticles.CreateDate);
            cell5.CellStyle = style;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多