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 из моей пустой книги, до и после
Все идеи приветствуются.