【问题标题】:Milliseconds missing when getting a DateTime value from Excel using .Net Interop使用 .Net Interop 从 Excel 获取 DateTime 值时缺少毫秒
【发布时间】:2008-11-18 11:12:31
【问题描述】:

如果我通过 .Net COM Interop 使用 Range.set_value 将 DateTime 值放入 Excel 单元格,然后使用 Range.get_value 检索同一单元格的值,则不会返回值的毫秒部分,尽管其他所有内容是正确的。

这是一个错误吗?

解决方法是什么?我猜测使用 Value2 属性可能会有所帮助。有没有其他人试过这个?

【问题讨论】:

    标签: c# .net excel com-interop


    【解决方案1】:

    如果您在 Excel 中手动设置具有毫秒值的日期/时间,它会保留它吗? Excel内部对象模型我不知道,但可以想象它只是不支持毫秒。

    编辑:好的,现在我们知道 set 失败(当然,get 也可能失败)...您可以在通过 DateTime.ToOADate() 转换后尝试将其设置为 double。我并不是说我抱有很多希望,但值得一试......

    【讨论】:

    • 乔恩,是的,它确实维护它,但您必须使用自定义单元格格式来显示毫秒组件以及日期时间部分。
    • 使用 .NET 进行设置后,如果您保存工作表,是否可以使用自定义格式查看结果? (这应该表明问题出在 set 还是 get 上。)
    • 乔恩,好主意:通过 .Net 设置值后,毫秒组件实际上并没有显示,即使使用自定义格式也是如此。因此问题从集合开始。
    【解决方案2】:

    作为Jon suggested,如果您使用 Range.Value2 属性设置值,则使用 DateTime.ToOADate 将 DateTime 转换为双精度(然后再次使用 DateTime.FromOADate)将起作用。

    此属性的唯一问题是,如果您还不知道,它不会告诉您单元格应该被视为日期时间。我想要解决这个问题,您需要使用两遍方法:使用 Range.get_Value 获取单元格值以确定它们的类型,然后,对于任何 DateTime 单元格,使用 Range.Value2 再次获取它们的值,然后使用 DateTime 进行转换.FromOADate.

    【讨论】:

    • 那个或者你可以检查单元格的数字格式。可能比使用 .Value 后跟 .Value2 便宜
    【解决方案3】:

    可能是因为this KB article中描述的问题。

    在这种情况下,设置 Value2 属性应该可以工作。

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 2016-03-15
      • 2013-07-28
      • 2021-03-19
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多