Созданный файл Docx4J XLSX всегда поврежден - PullRequest
0 голосов
/ 07 апреля 2020

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

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

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

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

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

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

Я видел еще один пост о Stackoverflow здесь о проблеме, связанной со шрифтами в Linux средах, поэтому я убедился, что установил MS TT Corefonts, но это не помогло моей проблеме. Я не знаю какие просто артефакты двух разных ОС или даже какие различия имеют значение. В основном это:

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

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

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

1 Ответ

0 голосов
/ 07 апреля 2020

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

...