天天看点

EasyExcel 导出 填充 (4.2 一张sheet需要导出多个表格填充数据)

1.需求

有些业务,需要导出excel的单张sheet中,导出多张表格,比如不同类型人员的工资进行小计再总计,简单示例如下

EasyExcel 导出 填充 (4.2 一张sheet需要导出多个表格填充数据)

如果业务比较复杂,导出的字段数很多,那么用常规的POI导出,就要搞死了.但是easyexcel却能很简单的利用填充方法进行导出,做好模板,仅需提取业务数据就行.详见以下示例

2.设计模板excel文件

EasyExcel 导出 填充 (4.2 一张sheet需要导出多个表格填充数据)

模板里,最关键的多表格填充,就是集合数据的前缀,如上图中的{tableA.str}的tableA,这个自主定义,自己能区分就行

3.接口层方法

@SneakyThrows
    @RequestMapping("fillMultyTable")
    public ResponseEntity<byte[]> fillMultyTable(HttpServletRequest req){
        //设定需要填充到模板的数据
        Map<String, String> map = new HashMap();
        map.put("year","2022");
        map.put("numA","3");
        map.put("numB","4");
        map.put("numC","7");
        List<FillSimpleDTO> tableA = new ArrayList<>();
        tableA.add(new FillSimpleDTO().setStr("老张").setNum(1));
        tableA.add(new FillSimpleDTO().setStr("老李").setNum(2));
        List<FillSimpleDTO> tableB = new ArrayList<>();
        tableB.add(new FillSimpleDTO().setStr("老刘").setNum(4));

        ClassPathResource classPathResource = new ClassPathResource("otherFiles/fillMultyTable.xlsx");
        try(
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                InputStream inputStream = classPathResource.getInputStream();
        ){
            //如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            ExcelWriter excelWriter = EasyExcel.write(os).withTemplate(inputStream).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            excelWriter.fill(map,writeSheet);//填充map
            //多表格填充
            excelWriter.fill(new FillWrapper("tableA", tableA),fillConfig,writeSheet);
            excelWriter.fill(new FillWrapper("tableB", tableB),fillConfig,writeSheet);
            excelWriter.finish();//不要忘记执行这个方法,关闭流,执行后才能真正填充数据
            byte[] bytes = os.toByteArray();
            return FileTool.createResEntity(req,bytes,"导出.xlsx");
        }
    }           

4.调用请求获取下载文件

EasyExcel 导出 填充 (4.2 一张sheet需要导出多个表格填充数据)
EasyExcel 导出 填充 (4.2 一张sheet需要导出多个表格填充数据)

继续阅读