我目前正在使用 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 中的日期。这很奇怪,因为对所有日期单元格执行相同的代码,但只有一些得到正确的格式......