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

这是一个错误吗?

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

有帮助吗?

解决方案 2

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

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

其他提示

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

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

可能是因为此知识库文章中描述的问题。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top