问题场景
调用代码:
/* 指定模板路径 */
TemplateExportParams params = new TemplateExportParams(
"WEB-INF/template/TestTemplate.xlsx");
/* 测试上下文 */
Map<String, Object> map = new HashMap<String, Object>();
map.put("key", "value");
/* 渲染 */
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
在使用 EasyPOI 的导入模板渲染功能时报异常:
异常信息
cn.afterturn.easypoi.cache.ExcelCache.getWorkbook(ExcelCache.java:59) - java.lang.reflect.InvocationTargetException
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) ~[poi-ooxml-3.8.jar:3.8]
已引入:
<!-- easypoi 包 -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
<!-- poi 包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
解决
看了网上很多提示说这个问题是 POI 包冲突或者包缺少之类。
根据 Re:org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException 的提示,去 POI 官网 Apache POI - Component Overview 找包依赖项:
发现少了 poi-ooxml-schemas 包,导入对应版本的该包即解决问题:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
</dependency>