EasyExcel根据模板动态导出一个Excel多个sheet

模板

在这里插入图片描述
模板放在项目中的位置:template/excel/certificateTemplate.xlsx
在这里插入图片描述

代码

  @Test
    public void test06() throws IOException {
        File rootPath = new File(ResourceUtils.getURL("classpath:").getPath());
        File templatePath = new File(rootPath.getAbsolutePath(), "template/excel/certificateTemplate.xlsx");
        String outsFileName = "预付款凭证-" + System.currentTimeMillis() + ".xlsx";

        String modelFileName = "tempFile.xlsx";
        File outModelFile = new File(modelFileName);

        File outsFile = new File(rootPath + "/" + outsFileName);

        String name = "张三1,张三2";
        List<String> taskNoList = Arrays.asList(name.split(","));

        EasyExcelUtil.createModel(taskNoList, outModelFile, templatePath);
       ExcelWriter excelWriter = EasyExcel.write(outsFile).withTemplate(outModelFile).build();
       // ExcelWriter excelWriter = EasyExcelUtil.setStyle(outModelFile, outsFile);
        for (String taskNo : taskNoList) {
            WriteSheet writeSheet = EasyExcel.writerSheet(taskNo).build();
            FillData stocktakeTaskVo = getInfo(taskNo);

            if (stocktakeTaskVo != null) {
                Map<String, Object> map = MapUtils.newHashMap();
                map.put("nowDate", Dat
### 使用 EasyExcel 实现多 Sheet 导出 为了实现将数据导出多个 Sheet 中,可以利用 `EasyExcel` 提供的功能来创建并写入不同的工作表。对于不需要标记有 `@ExcelProperty` 注解的字段,则不会被导出;如果希望排除某些特定列,则可以通过配置 `excludeColumnFieldNames` 来指定这些字段名称。 下面是一个具体的例子展示如何通过定义不同类别的实体对象以及编写相应的逻辑完成此操作: #### 定义实体类 假设存在两个类型的记录需要分别存放在各自的 sheet 面里,那么先要建立对应的 Java Bean 类型表示这两种结构的数据模型[^1]。 ```java // 假设这是第一个Sheet中的数据模型 public class DataModelOne { @ExcelProperty("ID") private Long id; // getter and setter methods... } // 这是第二个Sheet里的另一种形式的数据载体 public class DataModelTwo { @ExcelProperty("Name") private String name; // getter and setter methods... } ``` #### 编写导出方法 接下来,在服务层或者控制器中实现业务逻辑部分,这里会调用 EasyExcel 的 API 并传入上述定义好的列表作为参数来进行批量写出动作。 ```java import com.alibaba.excel.EasyExcel; import java.util.List; public void exportMultiSheets(String fileName, List<DataModelOne> listOne, List<DataModelTwo> listTwo){ try{ EasyExcel.write(fileName) .head(headsForListOne()) // 设置头部信息 .sheet("First Sheet") // 创建名为 "First Sheet" 的新表格签 .doWrite(listOne); // 将listOne的内容写入当前活动的工作簿 EasyExcel.write(fileName,true) // true 表示追加模式 .head(headsForListTwo()) .sheet("Second Sheet") .doWrite(listTwo); }catch(Exception e){ throw new RuntimeException(e.getMessage(),e.getCause()); } } ``` 在这个过程中需要注意的是第二次调用 `write()` 方法时传递了布尔值 `true` 参数给它,这表明是以追加的方式继续向同一个文件内增加新的工作表而不是覆盖原有内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值