使用EPPlus返回int的Excel日期列

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

所以我用EPPlus来读和写EXCEL文档。

工作流

  • 用户生成填充的excel文档。
  • 打开文档并添加一行
  • 上载和阅读

当我使用EPPlus创建文档时生成的日期在我读取值时正确显示,但是用户更改日期的行将显示为int值,而不是我可以用作实际日期的内容。

当我输入日期2014年1月1日然后编写它,打开文件时的输出显示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";

我还能得到一个整数

提问于
用户回答回答于

当我需要读取excel文件时,唯一不正确的日期是用户更改的日期

因此,当读取修改后的excel-Sheet时,修改的日期是数字,而未更改的值是日期格式中的字符串?

你可以得到DateTime通孔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

扫码关注云+社区