我了解基本问题是 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 值。但是,如果有人有更好的解决方案,请告诉我。