我知道大約 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,其中包含以下 1 行程式碼:
XSSFWorkbook workbook = new XSSFWorkbook(uploadFile.getInputStream());
異常訊息如下:
org.apache.poi.ooxml.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699
除了使用不同的格式之外,是否還有任何解決 bug #57699 的解決方案?
答案1
我使用 @PJFanning 的 ooxml 轉換器的稍微修改版本https://github.com/pjfanning/ooxml-strict-converter檢查並轉換嚴格的 Excel 工作簿(作為流),然後使用 POI 讀取它們。在有限的測試中,它似乎可以工作,儘管我擁有的文件非常簡單。
為了進行檢測,我用 BufferedInputStream 包裝了 InputStream,然後查看 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 格式。