3

我正在使用互操作从 excel 文件中读取和获取信息,但是当我从我的 excel 文件中读取日期时,我遇到了一个问题。2012 年 2 月 5 日;它给出了 41060。

如何读取正确的日期值或为什么它返回 41060?

4

2 回答 2

3

您找到了答案,但一些背景可能会有所帮助。

Excel 将日期和时间保存为数字。如果用户在单元格中键入 31-May-2012,Excel 会将其识别为日期,因此将值存储为 41060 并将数字格式设置为“dd-mmm-yyyy”。如果用户在单元格中输入 41060 并将数字格式设置为“dd-mmm-yyyy”,则该值将显示为 31-May-2012。数据输入完成后,Excel 不会记录第一个 41060 作为日期输入,第二个作为数字输入。

在 PC 上,日期的整数部分是自 1900 年以来的天数(在 Mac 上使用 1904 年),小数部分是:

time in seconds
---------------
seconds in day

所以 41060.25 代表:2012 年 5 月 31 日 6:00:00

当通过 Excel InterOp 读取数据时,我建议您.NumberFormat.Value不知道数据类型的情况下进行操作。 .Text也可能有用;它给出了用户看到的价值。

警告:如果你得到.NumberFormat了,Excel 使用的格式与 VBA 的 Format() 和 VB.Net 的 Format() 使用的格式略有不同。

有关 Excel 日期的更多详细信息,请访问如何在 Excel 中使用日期和时间。

于 2012-07-06T15:29:41.027 回答
2

我发现它以双精度返回日期,因此 DateTime.FromOADate(41060) 将返回正确格式化的日期。

于 2012-07-05T09:07:25.910 回答