Excel解析异常POIXMLException常见原因分析解决
无论是用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 工作簿(*.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包即可:
版本问题
异常信息如下:
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
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2022/05/11/java-excel-poi-exception/