EasyPoi导出excel不能设置序号的功能

我做一个Excel文档导出多个sheet页,开始我用的poi,但是写的很多,最后在网上查有easypoi是poi的封装体,代码写的少,功能比较多,我用的是没有模板的,文档上有序号,我就加上了序号了,但是序号加上就报空,当我们直接调用cn.afterturn.easypoi.excel.ExcelExportUtil的exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet)时,如果调用了cn.afterturn.easypoi.excel.entity.ExportParams.setAddIndex(true)时,系统会报空指针异常。

Caused by: java.lang.NullPointerException
	at cn.afterturn.easypoi.excel.export.base.ExportCommonService.getCellValue(ExportCommonService.java:194)
	at cn.afterturn.easypoi.excel.export.base.BaseExportService.createCells(BaseExportService.java:102)
	at cn.afterturn.easypoi.excel.export.ExcelExportService.insertDataToSheet(ExcelExportService.java:240)
	at cn.afterturn.easypoi.excel.export.ExcelExportService.createSheetForMap(ExcelExportService.java:206)
	at cn.afterturn.easypoi.excel.export.ExcelExportService.createSheet(ExcelExportService.java:176)

查看源代码发现是在cn.afterturn.easypoi.excel.export.ExcelExportService类的第228行的insertDataToSheet方法改变了序号的ExcelExportEntity的排序序号,使得序号放到了最后一列。然而序号的ExcelExportEntity的method和methods属性是都没有被赋值的,所以当执行到cn.afterturn.easypoi.excel.export.base.ExportCommonService的194行会报NullPointerException。
既然发现了问题,就要解决问题。
解决步骤一:
查看原代码发现cn.afterturn.easypoi.excel.ExcelExportUtil被final修饰了,不能被继承,所以我们重新定义一个工具类来模仿。

package com.shuiguyun.project.cost.easypoi;

import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.export.ExcelExportService;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @ProjectName: shuiguyun-manager-server
 * @Package: com.shuiguyun.project.cost.easypoi
 * @ClassName: ExcelExportUtil
 * @Description: ExcelExportUtil
 * @Date: 2020/6/29 15:21
 * @Version: 1.0
 */
public class ExcelExportUtil {
   

    public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<?> dataSet) {
   
        Workbook workbook = getWorkbook(entity.getType(),dataSet.size());;
        new SubExcelExportService().createSheetForMap(workbook, entity, entityList, dataSet);
        return workbook;
    }

    public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {
   
        Workbook workbook = getWorkbook(entity.getType(), dataSet.size());
        new SubExcelExportService().createSheet(workbook, entity, pojoClass, dataSet);
        return workbook;
    }

    private static Workbook getWorkbook(ExcelType type, int size) {
   
        if (ExcelType.HSSF.equals(type)) {
   
            return new HSSFWorkbook();
        } else if (size < 100000) {
   
            return new XSSFWorkbook();
        } else {
   
            return new SXSSFWorkbook();
        }
    }

    public static Workbook exportExcel(List<Map<String, Object>> list, ExcelType type) {
   
        Workbook workbook = getWorkbook(type, 0);
        Iterator var3 = list.iterator();

        while(var3.hasNext()) {
   
            Map<String, Object> map = (Map)var3.next();
            ExcelExportService service = new ExcelExportService();//底层用的是这个  我在这块做了一个修改
            new SubExcelExportService().createSheet(workbook, (ExportParams)map.get("title"), (Class)map.get("entity"), (Collection)map.get("data"));
        }

        return workbook;
    }

    public static void exportExcel(HttpServletResponse response, Workbook workbook) throws Exception {
   
        response.reset(
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值