【问题标题】:How to fix incorrect date and time values from Excel?如何修复 Excel 中不正确的日期和时间值?
【发布时间】:2020-02-07 17:11:03
【问题描述】:

我使用EPPlus excelpackagec#spreadsheet 获取值。电子表格有两个单独的列DateTime。问题是日期值是2/4/2020,但它返回为2/4/2020 12:00:00 AM。时间值为12:21 AM,但它返回12/30/1899 12:21:00 PM。我想要的结果是返回spreadsheet 中的值。我不清楚为什么会发生这种情况或如何根据我的需要解决问题。

using (ExcelPackage package = new ExcelPackage(fs))
    {
        ExcelWorkbook excelWorkBook = package.Workbook;
        ExcelWorksheet ws = excelWorkBook.Worksheets.First();
        int rowCount = 0;
        rowCount = ws.Dimension.End.Row;

        for (int r = 2; r <= rowCount; r++)
        {
            string status = ws.Cells[r, 11].Value?.ToString();
            string deliveredDate = ws.Cells[r, 15].Value?.ToString();
            string deliveredTime = ws.Cells[r, 17].Value?.ToString();
        }
        fs.Close();
    }
}

【问题讨论】:

  • 没有错。 Excel 将日期存储为 OADate 值 - 本质上是具有特定含义的两倍。 Epplus 理解 OADates 并将 DateTime 值存储为 OADates。日期或时间的显示方式取决于单元格的样式。如果修改字符串,则会破坏日期。 不要触摸值,改为修改单元格样式
  • 我不清楚你的建议。如果您的意思是修改电子表格中的单元格样式,我没有权限这样做。我应该解析出我需要的值吗?
  • 使用例如ws.Cells[r, 11].Style.Numberformat.Format = "yyyy-mm-dd";ws.Cells[r, 11].Style.Numberformat.Format = "mm/dd/yyyy"; 仅将值显示为日期。 hh:mm 时间等
  • 您已经在尝试修改电子表格。问题在于 错误 样式。你必须修复它。值没有问题,问题是style
  • DateTime.ToOADate 文档解释了 OADate 是什么,end 解释了基准实际上是 1899 年 12 月 30 日。因此,如果时间值被格式化为 date,它将显示为12/30/1899 12:21:00 PM

标签: c# excel excelpackage


【解决方案1】:

这是实际值和所述值的2个字符串表示之间的正常混淆。这尤其适用于 DateTime 值。

问题是日期值是“2/4/2020”,但它返回为“2/4/2020 12:00:00 AM”

日期本身并不真正有效。几十年来,我们总是有 DateTimes。日期和时间作为单独的类型?大跌。这是难以解释的事情之一,但一旦遇到潜在问题就会变得明显。

由于在输入过程中没有给出具体时间,因此采用了默认值 - 00:00:00 或 12 AM。然后将单元格设置为仅显示“日期”部分。相当于“2/4/2020 12:00:00 AM”的东西确实是的。名为 Microsoft Excel(或您使用的任何内容)的显示引擎只是被告知不要通过单元格格式显示该部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 2014-06-29
    • 2010-09-19
    • 2016-03-05
    • 2023-04-02
    • 2017-07-18
    • 2017-11-02
    相关资源
    最近更新 更多