easyexcel一个模板动态多个sheet填充

根据模板中第一个Sheet的样式生成多个Sheet,每个sheet中的样式与模板第一个sheet中的样式一样

目前easyexcel不能根据模板动态生成sheet,模板固定的几个sheet就只能填充那几个sheet,当代码里指定了模板中不存在的sheet就会报空指针.。在这里插入图片描述
遇到这种情况一般只能通过代码动态生成excel文件,而且样式什么的都需要通过代码来设定,这也是比较麻烦的,所以想要通过模板动态导出多个sheet,可以先利用poi克隆出多个sheet的模板写到流里然后再进行填充。

引入jar包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.10</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

代码实例:


    public void fillTemplate() {
        //excel模板
        String templateFileName = "D:\\home\\list.xlsx";
        File file = new File(templateFileName);
        try (FileInputStream fileInputStream = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            //填充到sheet的数据
            List list1 = new ArrayList<Object>();
            for (int i = 0; i < 10; i++) {
                Map map = new HashMap<Object, Object>();
                map.put("name", "小明" + i);
                map.put("score", 90 + i);
                list1.add(map);
            }
            int sheetNum = 2;
            //原模板只有一个sheet,通过poi复制出需要的sheet个数的模板
            XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
            //设置模板的第一个sheet的名称
            workbook.setSheetName(0, "sheet1");
            for (int i = 1; i < sheetNum; i++) {
                //复制模板,得到第i个sheet
                int num = i + 1;
                workbook.cloneSheet(0, "sheet" + num);
            }
            //写到流里
            workbook.write(bos);
            byte[] bArray = bos.toByteArray();
            InputStream is = new ByteArrayInputStream(bArray);
            //输出文件路径
            String fileName = "D:\\home\\" + System.currentTimeMillis() + ".xlsx";
            ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(is).build();
            for (int i = 0; i < sheetNum; i++) {
                int num = i + 1;
                WriteSheet writeSheet = EasyExcel.writerSheet("sheet" + num).build();
                excelWriter.fill(list1, writeSheet);
            }
            // 关闭流
            excelWriter.finish();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

效果
模板如下:
在这里插入图片描述
导出如下:
在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值