天天看點

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需要導出多個表格填充資料)

繼續閱讀