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
结束小组