JXL (Java) перейти на систему дат 1904 года - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужно изменить систему дат на календарь 1904 , используя JXL (вместо 1900 календарь ).

Каждый раз, когда я пишу что-то в Excel с использованием JXL API, система даты устанавливается по умолчанию, и мне нужно изменить систему даты.

Когда я пишу отрицательные значения времени (например, -0: 55), я получаю ################ вместо -0: 55.

После того, как я изменил систему дат на 1904 в Excel, ################ изменился на -0: 55.

Есть ли способ изменить это автоматически в JXL?

1 Ответ

0 голосов
/ 10 апреля 2019

Фактическая версия jxl не может этого сделать. У меня та же проблема, и я только что отладил jxl. Jxl правильно читает запись для формата даты 1904 года, но не записывает ее. Он всегда записывает формат даты 1900 как константу.

Я вижу следующие решения:

1) Измените библиотеку jxl, чтобы она могла записывать формат даты 1904 года. Это должно быть не так сложно. В методе WritableWorkbookImpl.write() необходимо изменить строку

    NineteenFourRecord nf = new NineteenFourRecord(false);

значение параметра false до true для формата даты 1904 года.

В приватном методе DateRecord.calculateValue(boolean) вы должны изменить строку

    value = utcDays + utcOffsetDays;

путем замены utcOffsetDays другой константой с числом дней на четыре года меньше для формата даты 1904 года.

Возможно, есть и другие места, которые можно изменить (особенно если сделать красивое решение с форматом 1904 как свойством рабочей книги), но это то, что относится к моей программе. Также обратите внимание на обязательства LGPL при продаже вашей программы.

2) Более простое решение: всегда помещайте положительные значения времени в ячейки и сохраняйте знак в формате ячейки. Например, используйте формат "[h]:mm:ss" для положительных значений и "-[h]:mm:ss" для отрицательных значений.

Недостаток решения 2): Мысль выглядит идеально, - это положительное значение в ячейке, которое подразумевается как отрицательное, и при выполнении вычислений результаты могут быть неверными.

...