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

时间:2008-11-18 11:12:31

标签: c# .net excel com-interop

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

这是一个错误吗?

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

作为Jon suggested,如果使用Range.Value2属性设置值,则使用DateTime.ToOADate将DateTime转换为double(然后使用DateTime.FromOADate再次返回)。

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

答案 2 :(得分:2)

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

在这种情况下,设置Value2属性应该有效。