使用easy-poi实现数据的树形导出EXCEL,可合并父级单元格

项目中有个需求,需要将四层数据封装成树形结构,然后导出EXCEL,我这里的每层数据结构都是不同类型的实体类。比如A类父类包含B类,也就是A类中会有一个B类的List集合,B类中有C类的集合,以此类推。导出时,需要将当前类的父级进行单元格合并,因为父类可能有多个子类对象。比如像下面这种导出结构:

演示表格
表头1表头2表头3表头4
A类B类1C类1
C类2
B类2

类型于这种导出的样式,但是每一列都是同一种类型的实体类。

实现方式:

一:导入依赖

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>

二:使用easy-poi提供的工具类直接调用对应方法即可

工具类名称:

ExcelExportUtil

其里面都是静态方法,可以直接类名调用。我实现的方法是:

public static void excelExport(List<SecurityRiskObjectDto> securityRiskObjectDtoList, HttpServletResponse response, String fileName) throws IOException {
        HttpServletResponseUtils.settingResponse(response, fileName);
        OutputStream outputStream = response.getOutputStream();
        //title:表格名称 sheetName
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(fileName, fileName), SecurityRiskObjectDto.class, securityRiskObjectDtoList);
        workbook.write(outputStream);
        response.getOutputStream().flush();
        response.getOutputStream().close();
    }

静态导出方法 

    public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass,                 
        Collection<?> dataSet) {

        Workbook workbook = getWorkbook(entity.getType(), dataSet.size());
        (new ExcelExportService()).createSheet(workbook, entity, pojoClass, dataSet);
        return workbook;
    }

使用这个工具类调用其 excelExport方法,这个方法有很多重载方法,可以根据自己的需求调用其他方法。我调用的这个方法只需要传入三个参数。

第一个参数就固定传入new ExportParams,里面的参数是文件名。

第二个参数是我最外层实体类的类型,也就是上面举例的A的类型。

第三个参数只需要将封装好的实体对象传进去既可,因为人家这个excelExport方法中需要传入对象集合,所以我把封装好的对象又搞了一个voList实体类封装了一次,根据举例,也就是把A类在多封装一次,使用A类的集合形式传入。

三:给对应的实体类加上对应的注解

easy-poi实际上就是基于注解进行导出的,我们这里只需要用到两个注解

@Excel(name = "", needMerge = true),name表示表头名称,needMerge表示是否需要合并,父类的数据需要合并的话就置为true,比如向上面的格式一样
@ExcelCollection(name = "", orderNum = "4")给子类集合上标注,就是在A类中给B类的List上加上这个注解,里面的参数可以不用管,orderNum其实表示的就是当前数据输出在第几行,比如上面的例子表格,B类在第二列,如果B类有其他字段的话,这个orderNum的值就依次往上加,当然也可以不用设置

导出结束后关闭资源即可,这样就可以完成树形结构的数据导出。子类的上一级也会相应的合并空白单元格 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值