我知道大约 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,但仍然看到错误 #57699,其中包含以下 1 行代码:
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 读取它们。在有限的测试中,它似乎有效,尽管我拥有的文件非常简单。
为了检测,我用 BufferedInputStream 包装 InputStream,然后查看 Zip 文件中的 XML(xlsx 文件实际上是 zip 文件中的 XML 文件的集合),寻找表明其是严格格式的命名空间标记。
答案2
https://github.com/pjfanning/excel-streaming-reader对读取此格式的 xlsx 文件有一些支持。
支持仍在不断发展,如果您有兴趣支持 OOXML 严格格式,建议您使用最新的可用 excel-streaming-reader 版本。
读取 xlsx 文件时,excel-streaming-reader 会自动识别该文件为 Strict OOXML 格式。