Apache POI 4.1 - neues XSSFWorkbook verursacht POIXMLException: Strict OOXML wird derzeit nicht unterstützt

Apache POI 4.1 - neues XSSFWorkbook verursacht POIXMLException: Strict OOXML wird derzeit nicht unterstützt

Mir ist bewusst, dass es vor etwa 3–4 Jahren ein Problem gab (ASF-Fehler 57699) mit dem Lesen von .xlsxDateien (https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se).

Heute habe ich Apache POI 4.1 ausprobiert, sehe aber immer noch den Fehler Nr. 57699 mit der folgenden Codezeile:

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

Die Ausnahmemeldung lautet unten:

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

Gibt es außer der Verwendung anderer Formate andere Workaroundlösungen für den Fehler Nr. 57699?

Antwort1

Ich verwende eine leicht modifizierte Version des ooxml-Konverters von @PJFanninghttps://github.com/pjfanning/ooxml-strict-converterum strenge Excel-Arbeitsmappen (als Streams) zu prüfen und zu konvertieren und sie dann mit POI zu lesen. In begrenzten Tests scheint es zu funktionieren, obwohl die Dateien, die ich habe, ziemlich unkompliziert sind.

Zur Erkennung umschließe ich den InputStream mit einem BufferedInputStream und schaue dann in das XML in der Zip-Datei (xlsx-Dateien sind eigentlich eine Sammlung von XML-Dateien in einer Zip-Datei), um nach Namespace-Markierungen zu suchen, die darauf hinweisen, dass das Format strikt ist.

Antwort2

https://github.com/pjfanning/excel-streaming-readerbietet eine gewisse Unterstützung für das Lesen von xlsx-Dateien in diesem Format.

Der Support wird noch weiterentwickelt. Es wird empfohlen, die neueste verfügbare Version des Excel-Streaming-Readers zu verwenden, wenn Sie das OOXML Strict-Format unterstützen möchten.

Beim Lesen von xlsx-Dateien erkennt der Excel-Streaming-Reader automatisch, dass die Datei im strikten OOXML-Format vorliegt.

verwandte Informationen