Docx4J Сгенерированный файл XLSX всегда поврежден

TL; DR: рабочая книга Excel, созданная Docx4J, всегда сообщает о повреждении, но я не могу определить, что Excel не нравится в базовом XML, не говоря уже о том, как это исправить.

Мой пример использования следующий: я пытаюсь регулярно автоматически создавать книгу Excel с диаграммами и графиками. Изменится только необработанные данные, но все остальное будет динамически обновляться по мере изменения необработанных данных.

Итак, я создал книгу Excel, в которой есть несколько диаграмм и графиков, созданных с помощью листа необработанных данных. Я использую это как шаблон. Все значения необработанных данных являются числовыми. Намерение состояло в том, чтобы использовать Docx4J для чтения этого «шаблона» и заполнения таблицы необработанных данных, а затем сохранить ее как новый файл, после чего открытие инициирует пересчет, а диаграммы и графики обновятся. Поскольку я новичок в Docx4j, я в основном решил делать маленькие шаги, сначала проверяя, могу ли я открыть и прочитать содержимое ячеек; что я мог. Все идет нормально. Я также мог изменить значения ячеек, но я мог проверить это только программно, записав на консоль местоположение и значение до изменения, затем местоположение и значение после изменения (например, A1 = 45, за которым следует A1 = 55) .

Моя проблема начинается, когда я пытаюсь открыть полученный файл. Он генерирует, выглядит примерно подходящего размера, но Excel утверждает, что он поврежден. Он пытается восстановить то, что может, но в конечном итоге терпит неудачу, и книга даже не открывается. Для устранения неполадок я открыл сгенерированный xlsx и подтвердил, что все различные файлы XML, составляющие файл xlsx, присутствуют и читаются, поэтому я прихожу к выводу, что либо чего-то не хватает, либо некоторая часть XML, выходящая с другой стороны, не то, что нужно Excel . Дальнейшее устранение неполадок включало создание пустой книги (без данных, 1 лист) в качестве моего «шаблона», ее открытие и последующее сохранение в файловой системе с другим именем и просто попытка проверить, могу ли я открыть ее в Excel, но без кубиков. . Это исключает что-либо, связанное с моими попытками записать или добавить данные в таблицу.

Соответствующая информация об окружающей среде:

  • Книга "шаблон" создается на 64-битной машине с Windows 10.
  • Мой код docx4j выполняется на машине Debian 10 Linux под управлением OpenJDK 11.0.4
  • Моя версия Excel как для создания «шаблона», так и для открытия копии - это Excel для Office365.
  • Я использую Docx4J v11.1.3, но я также пробовал использовать v8.1.5 (в обоих случаях мне пришлось использовать эталонную реализацию JAXB, чтобы получить вокруг ошибки сортировки при попытке сохранения)

Я видел еще одно сообщение в Stackoverflow здесь о проблеме, связанной со шрифтами в средах Linux, поэтому я обязательно установил MS TT Corefonts, но это не помогло моей проблеме.

Я прогнал весь распакованный каталог через BeyondCompare, и есть некоторые отличия, но я не знаю, что это просто артефакты двух разных ОС или даже какие различия имеют значение. В основном это:

  • небольшие различия в размере файла
  • логические значения отображаются как «1», «да» или «истина», но не одинаково для обоих файлов.
  • пространства имен и атрибуты в одном файле, но не в другом

Sheet1 из моей пустой книги, до и после

Все идеи приветствуются.


person TMarz    schedule 06.04.2020    source источник


Ответы (1)


Попробуйте только что выпущенную версию docx4j 8.1.6, в которой исправлена ​​обработка файлов xlsx, созданных в последних выпусках Excel. Это было https://github.com/plutext/docx4j/issues/389.

person JasonPlutext    schedule 07.04.2020
comment
Спасибо, Джейсон. Я попробую это AM. - person TMarz; 07.04.2020
comment
Сработало как обаяние, Джейсон. Я тестировал как свою пустую книгу, так и более тщательно продуманное намерение установить значения, чтобы сделать диаграммы и графики динамическими. - person TMarz; 07.04.2020