Excel Date列使用EPPlus返回INT

Tsu*_*asa 25 c# excel epplus

所以我正在使用EPPlus来读写excel文档.

工作流程

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

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

当我输入日期1/01/2014并写入时,我打开文件时的输出显示41640

我正在读它如下

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

更新

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

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");
}
Run Code Online (Sandbox Code Playgroud)

在读取价值时我也试过了

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

我还是回来了INT

Tim*_*ter 42

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

因此,当您阅读修改后的excel表时,修改日期是数字,而未更改的值是日期格式的字符串?

你可以得到DateTime通道DateTime.FromOADate:

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

使用您的样本编号:

Console.Write(DateTime.FromOADate(41640)); // ->  01/01/2014 
Run Code Online (Sandbox Code Playgroud)

  • @Tim Schmelter如果我循环遍历excel列,我不知道哪个列有Date值,我需要将它转换为`DateTime` usig`OverOADate`? (3认同)
  • 或者你也可以这样做`worksheet.cells[row,column].text` (3认同)