当Arr [,]包含Date小于1900-01-01时,Excel Interop Range.Value = arr [,]与0x800A03EC崩溃

时间:2012-05-09 01:00:59

标签: excel datetime interop range hresult

我理解基本问题是Excel将1900-01-01表示为值1.但是,在Excel中,可以手动输入1900年以前的值。

// this converts the DataTable to an Object[,]
DataTable table = ...
Object[,] arr = DataTableUtils.toObjectArray(table, false);

Range r00 = r0.get_Resize(arr.GetLength(0), arr.GetLength(1));
r00.Value = arr; // <-- this will crash if ...

如果arr [,]包含1899-12-31之前的DateTime对象,则会产生0x800A03EC异常。奇怪的是,1899-12-31很好,Excel增加了一天的价值。最初我用1900-01-01替换了1900年的日期,但是在输出文件中,它们是1900-01-02!

目前,我正在使用解决方案来替换错误的DateTime值。但是,如果有人有更好的解决方案,请告诉我。

0 个答案:

没有答案