Exceldate列使用EPPlus返回INT

所以我使用EPPlus来读取和写入Excel文档。

工作stream程

  • 用户生成填充的Excel文档
  • 打开文档并添加一行
  • 已上传并阅读

使用EPPlus创build文档时生成的date在正在读取值时正确显示,但用户更改date或添加的行显示为INT值,而不是我可以用作实际date的东西。

当我inputdate1/01/2014并写入时,输出当我打开文件显示41640

我正在阅读如下

sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value != null ? sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Value.ToString().Trim() : string.Empty 

更新

导出文件时,我添加了以下内容

 DateTime testDate; if (DateTime.TryParse(split[i], out testDate)) { sheet.Cells[row, i + 1].Style.Numberformat.Format = "MM/dd/yyyy"; sheet.Cells[row, i + 1].Value = testDate.ToString("MM/dd/yyyy"); } 

另外当阅读价值回我已经尝试过

 sheet.Cells[i, "AE".ConvertExcelColumnIndex()].Style.Numberformat.Format = "MM/dd/yyy"; 

我仍然得到一个INT回来

…当我需要阅读该Excel文件时,唯一不正确的date是用户已经改变的date

所以,当你阅读修改的Excel表,修改的date是数字,而不变的值是你的date格式的string?

你可以通过DateTime.FromOADate得到DateTime.FromOADate

 long dateNum = long.Parse(worksheet.Cells[row, column].Value.ToString()); DateTime result = DateTime.FromOADate(dateNum); 

用你的样品号码:

 Console.Write(DateTime.FromOADate(41640)); // -> 01/01/2014 

您也可以更改“NumberFormatLocal”属性。 这对我有效。 如果在使用EPPLUS进行打印之前格式化Excel文件。

典型excel文件中的代码格式列A的以下基本示例。

 Sub ChangeExcelColumnFormat() Dim ExcelApp As Excel.Application Dim ExcelWB As Excel.Workbook Dim ExcelWS As Excel.Worksheet Dim formatRange As Excel.Range Dim strFile As String = "C:\Test.xlsx" Dim strSheetname As String = "Sheet1" ExcelApp = New Excel.Application ExcelWB = ExcelApp.Workbooks.Open(strFile) strColSelect = "A:A" strFormat = "dd/mm/yyyy" formatRange = ExcelWS.Range(strColSelect) formatRange.NumberFormatLocal = strFormat ExcelWB.Save() ExcelWB.Close() ExcelApp.Quit() ExcelWS = Nothing ExcelWB = Nothing ExcelApp = Nothing 

结束小组