jxl 的实际版本无法做到这一点。我有同样的问题,我只是做了一些jxl的调试。 Jxl 正确读取了 1904 日期格式的记录,但没有写入。它总是将 1900 日期格式写为常量。
我看到以下解决方案:
1) 更改 jxl 库,使其可以写入 1904 日期格式。那应该不是那么难。在 WritableWorkbookImpl.write() 方法中,你必须在该行中进行更改
NineteenFourRecord nf = new NineteenFourRecord(false);
1904 日期格式的参数值false 到true。
在私有方法DateRecord.calculateValue(boolean)你必须改行
value = utcDays + utcOffsetDays;
在某种程度上将utcOffsetDays 替换为一个不同的常数,对于 1904 年的日期格式,四年的天数会减少。
可能还有更多地方需要更改(尤其是在使用 1904 格式作为工作簿的属性进行漂亮的解决方案时),但这与我的程序相关。在销售您的程序时,还要注意 LGPL 的义务。
2) 更简单的解决方案:始终将正时间值放入单元格中,并将符号存储在单元格格式中。例如,对正值使用格式"[h]:mm:ss",对负值使用"-[h]:mm:ss"。
解决方案2)的缺点:认为看起来很完美,单元格中有一个表示负数的正值,并且在进行计算时结果可能是错误的。