Изменение таблицы PowerPoint с помощью POI-3.10-FINAL

#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 (я должен исследовать это дальше, но проверка информации о границе и заполнении, прежде чем пытаться их установить, определенно устранила мою проблему).

Эти проблемы было довольно легко исправить, как только я их выяснил.