2008-11-18 35 views
2

一个DateTime值。如果我把日期时间值转换成使用Range.set_value通过净COM互操作一个Excel单元格,然后使用Range.get_value检索同一单元格的值,则毫秒部分缺失该值不会被返回,尽管一切都是正确的。毫秒获得当从Excel中使用.NET互操作程序

这是一个错误?

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

回答

2

由于Jon suggested,转换日期时间为双用DateTime.ToOADate(然后再回到使用DateTime.FromOADate)工程如果使用Range.Value2属性设置该值。

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

4

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

编辑:好吧,现在我们知道该设置失败(当然也可能会失败)...您可以尝试通过DateTime.ToOADate()转换后将其设置为双精度。我不是说我伸出希望,但它是值得一试...

+0

Jon, 是的,它确实维持它,但您必须使用自定义单元格格式来显示毫秒组件以及日期时间部分。 – 2008-11-18 11:19:34

+0

并且使用.NET进行设置后,如果保存工作表,可以使用自定义格式查看结果吗? (这应该表明问题是否与设置或得到。) – 2008-11-18 11:21:19

2

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

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

相关问题