#java #apache-poi #powerpoint #xslf
#java #apache-poi #powerpoint #xslf
Вопрос:
У меня возникли проблемы с использованием POI-3.10-FINAL
, когда редактирование PPTX не работает полностью. Я заметил, что я успешно могу добавлять новые слайды, но изменения фигур (в данном случае таблицы) не отражаются в выводимом файле PPTX.
Я смог исправить это, переключившись с poi-ooxml-schemas-*.jar
на ooxml-schemas-1.1.jar
, но полученный файл PPTX, похоже, поврежден: PowerPoint 2007 не удается открыть его, но PowerPoint 2010 сначала восстанавливает его, а затем правильно открывает.
Исследуя проблему, я заметил, что «docProps/app.xml » обновляется неправильно (я предполагаю, что другие файлы в PPTX также не обновляются).
Есть идеи?
Комментарии:
1. Какие обновления вы ожидали увидеть внутри
docProps/app.xml
?2. Я ожидал увидеть обновленную информацию о текущем количестве слайдов, количестве заметок…. Однако я смог исправить свою проблему, и это не имело никакого отношения к app.xml документ. Смотрите мой ответ ниже
Ответ №1:
Я смог правильно устранить неполадки и устранить проблемы с POI с помощью OpenXML SDK от Microsoft (см. OpenXML SDK). SDK помогает вам сканировать файл PPTX (или любой другой документ OpenXML) и составляет список всех обнаруженных ошибок.
В моем случае я устанавливал для текстового значения одной из ячеек моей таблицы значение null. В свою очередь, POI сгенерировал xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance объявление в самом верхнем теге слайда и использовало xsi:nil=»true» в теге ячейки, что PowerPoint абсолютно не понравилось.
Еще одна проблема, с которой я столкнулся, заключалась в том, что я изменял и создавал новые строки и столбцы в своей таблице. Чтобы упростить работу в моем коде, всякий раз, когда я что-либо делал с ячейкой, я обязательно устанавливал информацию о границе на черный с шириной 1, а цвет заливки — на белый. По какой-то странной причине кажется, что POI не заменял информацию о границе, а добавлял ее, из-за чего PPTX имел 2 конфликтующих значения, а не 1 (я должен исследовать это дальше, но проверка информации о границе и заполнении, прежде чем пытаться их установить, определенно устранила мою проблему).
Эти проблемы было довольно легко исправить, как только я их выяснил.