Apache POI 4.1 — новый XSSFWorkbook вызывает POIXMLException: Strict OOXML в настоящее время не поддерживается

Apache POI 4.1 — новый XSSFWorkbook вызывает POIXMLException: Strict OOXML в настоящее время не поддерживается

Я знаю, что около 3–4 лет назад была проблема (Ошибка АЧС 57699) с чтением .xlsxфайлов (https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se).

Сегодня я попробовал Apache POI 4.1, но все еще вижу ошибку #57699 со следующей строкой кода:

XSSFWorkbook workbook = new XSSFWorkbook(uploadFile.getInputStream());

Сообщение об исключении приведено ниже:

org.apache.poi.ooxml.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699

Существуют ли какие-либо обходные пути для ошибки № 57699, помимо использования других форматов?

решение1

Я использую слегка измененную версию конвертера ooxml от @PJFanninghttps://github.com/pjfanning/ooxml-strict-converterдля проверки и преобразования строгих рабочих книг Excel (как потоков) и последующего их чтения с помощью POI. В ограниченном тестировании это, похоже, работает, хотя файлы, которые у меня есть, довольно прямолинейны.

Для обнаружения я оборачиваю InputStream с помощью BufferedInputStream, а затем просматриваю XML внутри Zip-файла (файлы xlsx на самом деле представляют собой набор XML-файлов в ZIP-файле) и ищу маркеры пространства имен, указывающие на то, что он находится в строгом формате.

решение2

https://github.com/pjfanning/excel-streaming-readerимеет некоторую поддержку чтения файлов xlsx в этом формате.

Поддержка все еще развивается, рекомендуется использовать последнюю доступную версию Excel-Streaming-Reader, если вы заинтересованы в поддержке формата OOXML Strict.

При чтении файлов xlsx excel-streaming-reader автоматически распознает, что файл имеет строгий формат OOXML.

Связанный контент