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