无论是用poi或easyExcel框架来解析Excel时,通常都会遇到类似如下的异常:

org.apache.poi.ooxml.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699
 
at org.apache.poi.ooxml.POIXMLDocumentPart.getPartFromOPCPackage(POIXMLDocumentPart.java:779)
	at org.apache.poi.ooxml.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:175)
	at org.apache.poi.ooxml.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:165)
	at org.apache.poi.ooxml.POIXMLDocument.<init>(POIXMLDocument.java:61)
	at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:282)

针对上述异常,通常有以下几种原因导致,并附带解决方案。

Excel格式错误

Excel使用的格式错误,需将其转换为Strict Open XML。

Excel解析异常POIXMLException常见原因分析解决插图

转换成Excel 工作簿(*.xlsx),然后clean一下项目就可以了。针对这个问题暂时没有太多的解决办法,你只能让用户保存为 Excel WorkBook 格式才能让 Apache POI 处理。

缺少依赖

如果抛出如下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ooxml/POIXMLDocumentPart
	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:108)
	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:90)
	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:77)
	at com.deepoove.poi.XWPFTemplate.compile(XWPFTemplate.java:73)
	at com.sun.unifyspatialdatabase.utils.WordTest.test(WordTest.java:33)
	at com.sun.unifyspatialdatabase.utils.WordTest.main(WordTest.java:46)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ooxml.POIXMLDocumentPart
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 6 more

则导致异常的原因往往是因为缺少jar包依赖,检查是否有如下依赖:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>

如果缺少对应依赖,则进行添加,再次尝试。

jar包冲突异常

如抛出如下异常:

org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException

则可能是jar包冲突导致的异常,删除冲突jar包即可:

Excel解析异常POIXMLException常见原因分析解决插图1

版本问题

异常信息如下:

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: javax.xml.stream.XMLEventFactory.newFactory()Ljavax/xml/stream/XMLEventFactory;
 at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.<clinit>(PackagePropertiesMarshaller.java:45)

案例中是使用poi jar包版本过高,使用的是3.11,而换成3.10后问题便解决了。

另外,必须要明确的是:

HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls

XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx

对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。

org.apache.poi.openxml4j.exceptions.InvalidOperationException

org.apache.poi.poifs.filesystem.OfficeXmlFileException



Excel解析异常POIXMLException常见原因分析解决插图2

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2022/05/11/java-excel-poi-exception/