如果我使用Range.set_value
通过.Net COM Interop将DateTime值放入Excel单元格中,然后使用Range.get_value
检索该相同单元格的值,则不会返回该值的毫秒部分,尽管其他一切都是正确的。
这是一个错误吗?
解决方法是什么?我猜测使用Value2属性可能会有所帮助。还有其他人试过吗?
答案 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属性应该有效。