关于easypoi2.3.0.1多个sheet模板导出数据报NullPointException的问题

直接说问题

在使用easypoi2.3.0.1 导出个多sheet页的excel 时候 会调用ExcelExportOfTemplateUtil 这个类中的createExcleByTemplate(TemplateExportParams params, Map<Integer, Map<String, Object>> map)方法,在掉用此方法的时候会报空指针异常,

追踪代码 发现空指针 是因为

 private CellStyle getStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
        return excelExportStyler.getTemplateStyles(isSingle, excelForEachParams);
    }

这个里面的excelExportStyler 为空导致的

再查看代码 发现

 createExcleByTemplate(TemplateExportParams params, Map<Integer, Map<String, Object>> map) { }里面没有对excelExportStyler(表格样式)进行创建,所以导致了这个问题

解决办法:

修改createExcleByTemplate 方法。ok  解决(这个是easypoi 源码里面的bug,需要重新编译jar包)

  public Workbook createExcleByTemplate(TemplateExportParams params,
                                          Map<Integer, Map<String, Object>> 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值