У меня есть веб-приложение (tomcat 8.5.4, java 1.7.0_72), которое ранее создавало действительные файлы xlsx excel с использованием Apache POI. Я работаю над преобразованием приложения для управления зависимостями jar с помощью maven, и теперь создаваемый файл считается поврежденным (или иным образом недействительным) в excel. Я вообще не изменил код, который генерирует файл, и включенные банки в основном такие же, за исключением некоторых изменений версии и удаления некоторых неиспользуемых банок, которых нет в дереве зависимостей maven (удаленные банки перечислены ниже).
Кто-нибудь знает, что я могу сделать, чтобы заставить POI генерировать файлы по-другому или почему excel считает, что эти изменения делают его недействительным? Я много искал ошибки с POI и поврежденными файлами Excel, и похоже, что в POI было несколько ошибок, которые могли повредить существующие файлы или прервать создание больших файлов, но ничего похожего на то, что это применимо в этом случае. Я видел здесь несколько вопросов, которые выглядели так, как будто они могут быть похожими, но в итоге не были применены.
Отличия
Когда я меняю файлы xlsx, созданные до и после, на zip-файлы и извлекаю их, а затем сравниваю каталоги с Windiff, различия заключаются в следующем (работает -> поврежден).
[content_types].xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> -> <Types>
_rels.rels, _rels\workbook.xml.rels
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> -> <Relationships>
docprops\core.xml
Время создания отличается
<?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
xl\styles.xml
numFmtId на 1 меньше
xl\worksheets\sheet1.xml, docprops\app.xml, xl\sharedstrings.xml, xl\workbook.xml
Идентичный
Банки
Моя компания использует локальный артефактный репозиторий вместо того, чтобы указывать на официальный репозиторий maven, поэтому было очень весело загружать все зависимости. Я предполагаю, что это вызвано тем, что у меня отсутствует jar или я использую неправильную версию, но На самом деле я не генерирую никаких ошибок, просто получаю плохой файл.
Я включаю poi-3.1.11.jar, poi-ooxml-3.11.jar и poi-ooxml-schemas-3.11.jar. Раньше у нас был commons-codec 1.9 в tomcat/lib и commons-codec 1.3 в WEB-INF/lib. Под maven я включил 1.9, хотя я также пытался вернуться к 1.3, и файл все еще был поврежден.
Я попытался обновить все версии poi до 3.1.14, но это не решило проблему. Я попытался вернуться к точным банкам poi[-ooxml-schemas]-3.11-20141221, которые работали раньше, но это не решило проблему. Я попытался переключить SXSSFWorkbook на обычную XSSFWorkbook, но это не помогло.
Вот список банок, которые я удалил при преобразовании в maven, повлияет ли какое-либо из них на apache poi?
ecj-4.5.1
el-impl-2.2
itext-2.0.8
jimi-1.0
js
opencsv-1.8
standard (1.1.2)