直接说问题
在使用easypoi2.3.0.1 导出个多sheet页的excel 时候 会调用ExcelExportOfTemplateUtil 这个类中的createExcleByTemplate(TemplateExportParams params, Map map)方法,在掉用此方法的时候会报空指针异常,
追踪代码 发现空指针 是因为
private CellStyle getStyles(boolean isSingle, ExcelForEachParams excelForEachParams) { return excelExportStyler.getTemplateStyles(isSingle, excelForEachParams); }
这个里面的excelExportStyler 为空导致的
再查看代码 发现
createExcleByTemplate(TemplateExportParams params, Map map) { }里面没有对excelExportStyler(表格样式)进行创建,所以导致了这个问题
解决办法:
修改createExcleByTemplate 方法。ok 解决(这个是easypoi 源码里面的bug,需要重新编译jar包)
public Workbook createExcleByTemplate(TemplateExportParams params, Map map) { // step 1. 判断模板的地址 if (params == null || map == null || StringUtils.isEmpty(params.getTemplateUrl())) { throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); } Workbook wb = null; // step 2. 判断模板的Excel类型,解析模板 try { this.teplateParams = params; wb = getCloneWorkBook(); // 创建表格样式(加上这个就ok) setExcelExportStyler((IExcelExportStyler) teplateParams.getStyle() .getConstructor(Workbook.class).newInstance(wb)); // step 3. 解析模板 for (int i = 0, le = params.isScanAllsheet() ? wb.getNumberOfSheets() : params.getSheetNum().length; i < le; i++) { if (params.getSheetName() != null && params.getSheetName().length > i && StringUtils.isNotEmpty(params.getSheetName()[i])) { wb.setSheetName(i, params.getSheetName()[i]); } tempCreateCellSet.clear(); parseTemplate(wb.getSheetAt(i), map.get(i)); } } catch (Exception e) { LOGGER.error(e.getMessage(), e); return null; } return wb; }
已经编译好的包:https://download.csdn.net/download/u011056339/11218296