使用NPOI将date写入Excel文件的问题

我目前正在使用NPOI来生成基于我的asp.net mvc应用程序数据库的Excel文件。 我几乎完成了代码,除了当我试图写date到Excel时,我一直得到一个小问题。

在数据库(MS SQL服务器)我把date保存为41883,41913等…在C#中我可以转换为一个DataTime对象使用

DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883)); 

我用来写date到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; 

这只是我的代码示例(正在写date的部分)。 这段代码的问题是,只有部分date单元格实际上被格式化为date,对于所有其他date单元格,我仍然看到数据库中的值,如数据库41883,41913等,当然,我可以select和应用短date/date从Excel格式(但我不希望这一点)。

任何人都可以让我知道为什么会出现这样的行为(格式只适用于部分单元格)…我甚至试图使用HSSFDataFormat.GetBuiltinFormat(“date”),但在这种情况下没有格式化单元格。

在这里输入图像描述

上面的图像解释更好的我的问题…当我select第一列中的第一个单元格,我看到单元格被格式化为“自定义”…所有其他未格式化的值是一般。 一旦我select的单元格,我可以格式化为Exceldate没有任何问题。 这是奇怪的,因为所有的date单元格执行相同的代码,但只有一些得到适当的格式…

任何想法或build议,将不胜感激!

谢谢!

安德烈

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

  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; }