【问题标题】:Reading Time HH:mm:ss from excel cell in c#从 c# 中的 excel 单元格读取时间 HH:mm:ss
【发布时间】:2022-11-30 08:28:36
【问题描述】:

我需要从 excel 文件中提取时间。 excel 中的时间以小时:分钟:秒表示。我拥有的读取时间的 c# 代码是:

DateTime dt = DateTime.Parse(worksheet.Cells[row, 3].Value.ToString());   
string GetTime = String.Format("{0:t}", dt);

此代码适用于一个文件,但当我插入另一个类似文件时,它不会读取时间。有谁知道为什么会这样。

读取时间的 Excel 表格:

Id Date Time
1 18/11/2022 11:51:00

不读取时间的 Excel 表格:

Id Date Time
1 08/08/2022 06:54:00

【问题讨论】:

  • 不要使用 Cells[row, 3].Value.ToString()) 开头。 Excel 支持日期,任何 Excel 库都应将日期值读取为 DateTime。如果该值为 DateTime,则只是在浪费 RAM。将值转换为 DateTime 并使用 TimeOfDay 属性读取时间。例如`((DateTime)worksheet.Cells[row, 3].Value).TimeOfDay
  • 不看时间怎么办?抛出异常?
  • 在输出窗口中,我读到“抛出的异常:'System.InvalidCastException'”

标签: c#


【解决方案1】:

Excel 本机支持日期。日期以二进制形式(特别是浮点数)存储,而不是文本形式。他们没有格式。它们的显示方式取决于单元格的数字格式和最终用户的区域设置,但实际值仍然是二进制的。

即使您在字段中看到时间文本,基础值也是 DateTime,其数字样式仅显示时间部分。您可以通过将单元格的数字样式更改为完整的日期时间或数字来进行测试。

所有 Excel 库都将加载 Excel 日期作为 .NET DateTime 值。如果 Excel 工作表包含实际日期,Value 已经是一个 DateTime。要获取其时间部分,请使用 DateTime.TimeOfDay 属性。

例如 :

TimeSpan time = ((DateTime)worksheet.Cells[row, 3].Value).TimeOfDay;

【讨论】:

  • 但它仍然没有从第二张表中读取时间。即使时间是 06:54:00,它也不会将该值转换为 DateTime
  • 如何它不是“阅读时间”吗?它会抛出异常吗?错误的价值?没有价值? ...
  • @Valkyrie 单独解析时间是没有意义的,没有“时间”数据类型。考虑将两个值相加(日期部分 + 时间部分;整数/整数部分是日期,小数部分是时间:天 = 1,小时 = 1/24),然后再将它们读入 DateTime
  • @MathieuGuindon 你不能添加两个 DateTime 值。 Excel 将日期和时间存储为 OADate。时间值的日期部分等于 0001-01-01。这些值显示为一天中的时间只是因为数字样式设置为该时间。
  • @Fildor 它不会在错误列表中抛出任何错误。它不会停止我的程序,但在输出窗口中我读到“抛出的异常:'System.InvalidCastException”
【解决方案2】:

我找到了您必须使用 FromOADate 才能获得正确格式的解决方案。 DateTime dt = DateTime.FromOADate((double)worksheet.Cells[row, 3].Value);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多