场景
使用poi时报错org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
报错信息:
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62)
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403)
解决方案
这个报错比较明显,反射找不到类XSSFFactory,一般是jar包冲突。
完整的类名应该是:org.apache.poi.xssf.usermodel.XSSFFactory
没有这个类,或者类名相同,路径名不对都是有问题的,说明没有这个类。
poi相关的poi有三个:poi、poi-ooxml、poi-ooxml-schemas
优先检查这3个即可。
高版本没有这个类了,建议用3.15(比较稳定的版本,且已知是支持XSSFFactory的)。
如果这3个类版本都是3.15了,pom.xml中也没找到其他poi相关配置,还是报错怎办呢?
还可能其他jar包依赖到这个包,再排查下依赖树(见文章 )。
最后发现果然有其他jar包依赖poi的版本是3.9,在那个依赖中排除掉,实测问题解决。