Для проекта нам нужно создать документ .xlsm excel, автоматически заполненный данными, введенными в наше приложение. Вся обработка документа Excel не зависит от остальной части бэкэнда, поэтому вся непосредственная обработка документа Excel переносится в его собственный модуль, и поэтому проект имеет следующую структуру
+ BaseFolder
|- settings.gradle
|- build.gradle
|
+--+ backend
| |- backend.gradle
| |- src
|
+--+ excel
|- excel.gradle
|- src
В модуле excel мы решили использовать Apache POI для заполнения файла шаблона .xlsm
. Следовательно, excel.gradle
имеет следующую зависимость
compile('org.apache.poi:poi-ooxml:3.17')
В модуле backend мы должны использовать Spring Tools для создания API и ojdbc8
для связи с базой данных Oracle для постоянного хранения информации. Эти данные из базы данных необходимо записать в файл Excel, поэтому в зависимостях backend.gradle
мы имеем
compile project(':excel')
...
compile('com.oracle.jdbc:ojdbc8:12.2.0.1')
Проект excel используется в бэкэнде - TemplateBuilderAdapter
, который принимает представление базы данных и вызывает соответствующие методы для TemplateBuilder
.
Когда в Apache POI XSSFWorkbook
вызывается .write(OutputStream stream)
из TemplateBuilder
внутри модуля excel , файл создается так, как и должно быть. С другой стороны, когда .write(OutputStream stream)
вызывается на TemplateBuilderAdapter
, который просто передает его TemplateBuilder
, файл поврежден.
С учетом вычета из XSSFWorkbook при записи создает поврежденный документ .xlsx в приложении Spring Boot, используя JDBC путем компиляции ojdbc8
, путь к классу заканчивается изменением синтаксического анализатора XML, используемого Apache POI, что приводит к поврежденные файлы Excel. Мы пытались использовать толстый .jar файл со всеми зависимостями проекта excel , но это не повезло.
Как мы можем использовать проект excel в проекте backend без изменения пути к классу всего, что используется в проекте excel ? И если нам потребуется заново указать путь к классу для очистки после импорта ojdbc8 , есть ли у кого-нибудь идеи относительно того, где и почему возникает конфликт?