Apache POI 4.1 - 新しい XSSFWorkbook により POIXMLException が発生します: 厳密な OOXML は現在サポートされていません

Apache POI 4.1 - 新しい XSSFWorkbook により POIXMLException が発生します: 厳密な OOXML は現在サポートされていません

3~4年前に問題があったことは知っています(ASF バグ 57699.xlsx)ファイルの読み取り(https://stackoverflow.com/questions/37749841/org-apache-poi-poixmlexception-strict-ooxml-isnt-currently-supported-please-se)。

今日、Apache POI 4.1 を試してみましたが、次の 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

私は@PJFanningのooxmlコンバーターを少し修正したバージョンを使用していますhttps://github.com/pjfanning/ooxml-strict-converter厳密な Excel ワークブックを (ストリームとして) チェックして変換し、POI で読み取ります。限られたテストでは機能しているようですが、私が持っているファイルは非常に単純です。

検出するには、InputStream を BufferedInputStream でラップし、Zip ファイル内の XML (xlsx ファイルは実際には zip ファイル内の XML ファイルのコレクションです) を調べて、厳密な形式であることを示す名前空間マーカーを探します。

答え2

https://github.com/pjfanning/excel-streaming-readerこの形式の xlsx ファイルの読み取りをサポートしています。

サポートはまだ進化中です。OOXML Strict 形式のサポートに関心がある場合は、利用可能な最新の excel-streaming-reader バージョンを使用することをお勧めします。

xlsx ファイルを読み取るとき、excel-streaming-reader はファイルが Strict OOXML 形式であることを自動的に認識します。

関連情報