【发布时间】: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