如果我使用通过 .Net COM Interop 将 DateTime 值放入 Excel 单元格Range.set_value
,然后使用 检索同一单元格Range.get_value
的值,则不会返回值的毫秒部分,尽管其他一切都是正确的。
这是一个错误吗?
解决方法是什么?我猜测使用 Value2 属性可能会有所帮助。有没有其他人试过这个?
如果我使用通过 .Net COM Interop 将 DateTime 值放入 Excel 单元格Range.set_value
,然后使用 检索同一单元格Range.get_value
的值,则不会返回值的毫秒部分,尽管其他一切都是正确的。
这是一个错误吗?
解决方法是什么?我猜测使用 Value2 属性可能会有所帮助。有没有其他人试过这个?
如果您在 Excel 中手动设置具有毫秒值的日期/时间,它会保持它吗?我不知道 Excel 内部对象模型,但可以想象它只是不支持毫秒。
编辑:好的,现在我们知道设置失败(当然,get 也可能失败)......您可以在通过DateTime.ToOADate()转换后尝试将其设置为双精度。我并不是说我抱有很大希望,但值得一试......
正如Jon 建议的那样,如果您使用 Range.Value2 属性设置值,则使用 DateTime.ToOADate(然后再次使用 DateTime.FromOADate)将 DateTime 转换为双精度值。
此属性的唯一问题是,如果您还不知道,它不会告诉您单元格应该被视为 DateTime。我想要解决这个问题,您需要使用两遍方法:使用 Range.get_Value 获取单元格值以确定它们的类型,然后,对于任何 DateTime 单元格,使用 Range.Value2 再次获取它们的值,然后使用 DateTime 进行转换.FromOAD 日期。
这可能是因为此知识库文章中描述的问题。
在这种情况下,设置 Value2 属性应该有效。