场景

使用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,在那个依赖中排除掉,实测问题解决。