EasyExcel 一个模板填充多个sheet

EasyExcel 一个模板填充多个sheet

📅 2023-08-03 15:16 👁️ 507 💬 0

1.版本介绍

  1. easyexcel:3.3.2

  2. SpringBoot:2.7.1

  3. Apache POI:4.1.2

2.背景介绍

现提供一个excel模板(sheet1),导出列表记录时,每个sheet页展示一条记录,最终生成多sheet文件

3.实现代码

@Slf4j
public class POIUtil {


    /**
    *获取resource下模板文件的文件流
    *
    */
    public static InputStream getResourcesFileInputStream(String fileName) {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
    }
    
    /**
     * 通过模板 生成多sheet
     *
     * @param inputStream
     * @return
     */
    @SneakyThrows
    public static InputStream createSheetFromTemplate(InputStream inputStream, int size) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        //原模板只有一个sheet,通过poi复制出需要的sheet个数的模板
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        //设置模板的第一个sheet的名称
        workbook.setSheetName(0, "sheet1");
        for (int i = 1; i < size; i++) {
            //复制模板,得到第i个sheet
            int num = i + 1;
            workbook.cloneSheet(0, "sheet" + num);
        }
        //写到流里
        workbook.write(bos);
        byte[] bArray = bos.toByteArray();
        InputStream is = new ByteArrayInputStream(bArray);
        return is;
    }

}


public class Application {

     public void listExport(HttpServletResponse response) {
         // 获取导出数据
        List<MyData> myDataList = service.getData();

        InputStream inputStream = POIUtil.getResourcesFileInputStream("template.xlsx");
        // 由模板生成多sheet
        InputStream is = POIUtil.createSheetFromTemplate(inputStream, myDataList.size());
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(is).build();
        for (int i = 0; i < myDataList.size(); i++) {
             int num = i + 1;
             MyData data = myDataList.get(i);
             WriteSheet writeSheet = EasyExcel.writerSheet("sheet" + num).build();
             excelWriter.fill(data, writeSheet);
         }
         excelWriter.finish()
     }
    
    
}

4.导出结果

image-20230803151409247

[参考来源](https://www.cnblogs.com/XiaoMingStudy1/p/17603449.html)
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值