使用.Net Interop从Excel获取DateTime值时缺less毫秒

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

这是一个错误?

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

如果您手动在Excel中以毫秒值设置date/时间,它是否保留它? 我不知道Excel内部对象模型,但可以想象,它不支持毫秒。

编辑:好的,现在我们知道该设置失败(获取也可能会失败,当然)…您可以尝试通过DateTime.ToOADate()转换后将其设置为一个双。 我不是说我抱着很大的希望,但值得一试

正如Jon所build议的那样 ,如果使用Range.Value2属性设置值,那么使用DateTime.ToOADate(然后再使用DateTime.FromOADate)将DateTime转换为double即可。

这个属性唯一的麻烦是,如果你还不知道,它不会告诉你单元格应该被当作DateTime。 我想要解决这个问题,你需要使用一个两遍的方法:使用Range.get_Value获取单元格值来确定它们的types,然后,对于任何DateTime单元格,再次使用Range.Value2获取它们的值,然后使用DateTime .FromOADate。

这可能是由于本知识库文章中描述的问题。

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