【问题标题】:Formatting '[$-F400]h:mm:ss\\ AM/PM' Excel 2007 date time in c#在 c# 中格式化'[$-F400]h:mm:ss\\ AM/PM' Excel 2007 日期时间
【发布时间】:2015-12-17 16:12:41
【问题描述】:

我正在尝试在 c# 中读取 Excel 2007+ 文件,但到目前为止我尝试过的所有库(OpenXML、ClosedXML 和 NPOI)似乎都无法正确解析具有时间格式的单元格。

在 Excel 中,数据的格式为数字 > 时间,并使用 '*hh:mm:ss' 作为类型。

当我查看库中的原始值时,它显示为 0.0416666666666667。我遵循了其他帖子的建议,这些帖子建议使用 DateTime.FromOADate (正确)导致'30/12/1899 01:00:00'。

我真正坚持的是如何显示日期时间对象 {30/12/1899 01:00:00},因为它在 Excel 中显示:'01:00:00'。我可以看到 Style.DateFormat 设置为 '[$-F400]h:mm:ss\ AM/PM' 但如何使用它来将 C# 中的 DateTime 对象格式化为字符串? ToString() 方法无法将其识别为有效格式。

【问题讨论】:

    标签: c# excel datetime openxml closedxml


    【解决方案1】:

    根据定义,DateTime 始终具有日期和时间。只有有时间,您必须使用TimeSpan。这是一个快速的方法。

    DateTime originalDateTime = DateTime.Now;
    TimeSpan hoursMinutesSeconds = originalDateTime.TimeOfDay;
    

    【讨论】:

    • 我了解日期和时间组件的概念。我正在努力解决的是如何使用 Excel 文件中的 NumberFormat 字符串 '[$-F400]h:mm:ss\ AM/PM' 将日期时间对象更改为字符串。
    • 我不确定您是否需要使用 excel 中的格式。我也不确定有没有办法。应该有一种方法可以让您在没有它的情况下以您想要的方式获取数据。
    • 我认为如果我们能够控制文件中的格式,那将是正确的。我们允许用户上传 excel 文件,因此我们不知道他们打算向我们发送什么格式而不查看 NumberFormat 字符串。我同意可能没有使用格式字符串的(简单)方式,并且由于不能强制他们使用 CSV,我们正在考虑使用 google drive/sheets 为我们将 xlsx 转换为 csv。跨度>
    • 哦,有道理。我不知道这就是你需要这种格式的原因。我会想办法做到这一点。
    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多