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,但仍然看到错误 #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 格式。

相关内容