【EasyExcel】复杂模板进行填充

背景

根据提供的格式进行Excel的下载。具体格式如下:
在这里插入图片描述

模板准备

根据提供的格式和业务需求进行分析,我发现这个功能就是一个简单的将DTO中的数据进行填充的操作

  1. 注意 :因为是DTO填充,不是List填充,所以模板中引用的数值都是由 **{}**括起来的;

  2. 如果是list填充需要**{.字段名}**;

  3. 对于背景里提供的带多选框的数据,需要在dto中定义新的字段,进行数据的展示;

    创建的模板如下图:
    在这里插入图片描述

代码展示

  1. 将写好的模板直接复制到代码中
    在这里插入图片描述
  2. pom文件中引入相应的坐标
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.7</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>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.17</version>
        </dependency>
  1. 方法的编写
    public void download(QueryDTO queryDTO,HttpServletResponse response){

        // 获取模板地址
        String  templateFileName = "template" + File.separator + "ndbgTemplate.xlsx";
        //导出模板
        ExcelWriter excelWriter = null;
        try {
            excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate
                    (new ClassPathResource(templateFileName).getInputStream()).build();
        } catch (IOException e) {
            logger.error("导出文件异常", e);
        }
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        Map<String, Object> map = new HashMap<String, Object>();
        this.templateFuzhi(map,ndbgDTO);//ndbgDTO就是你需要进行数据填充的dto
        excelWriter.fill(map, writeSheet);

        // 关闭流
        excelWriter.finish();
    }
//赋值方法中的内容
private Map templateFuzhi(Map<String, Object> map,NdbgDTO ndbgDTO){
        map.put("nsnd",ndbgDTO.getNsnd());
        map.put("tyxydm",ndbgDTO.getTyxydm());
        map.put("dwmc",ndbgDTO.getDwmc());
        map.put("fddbr",ndbgDTO.getFddbr());
        map.put("gkfwdh",ndbgDTO.getGkfwdh());
        }
是的,EasyExcel 可以通过 Excel 模板填充数据。使用 Excel 模板可以更加灵活和方便地生成 Excel 报表,同时还可以保留原有的样式和格式。 以下是一个例子,演示如何使用 EasyExcel 通过 Excel 模板填充数据: 1. 首先,我们需要准备一个 Excel 模板模板中包含我们要填充的数据和样式。在模板中,我们可以通过占位符(如 ${name})来标识数据的位置。 2. 然后,我们使用 EasyExcel 的 `withTemplate()` 方法来加载模板文件,并指定要填充数据的 sheet 名称或者索引。 3. 接着,我们通过 `sheet()` 方法来获取要填充数据的 sheet 对象,然后使用 `fill()` 方法来填充数据。在填充数据时,我们可以使用一个 Map 集合来存储数据,键值对的键为占位符,值为要填充的数据。 4. 最后,我们调用 `finish()` 方法来保存文件并关闭 ExcelWriter 对象。 下面是一个示例代码: ```java // 加载 Excel 模板 InputStream templateInputStream = new FileInputStream("template.xlsx"); ExcelWriter writer = EasyExcel .write(fileName) .withTemplate(templateInputStream) .build(); // 填充数据 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("name", "张三"); dataMap.put("age", 20); dataMap.put("gender", "男"); Sheet sheet = writer.getSheet(0); sheet.fill(dataMap); // 保存文件并关闭 ExcelWriter writer.finish(); ``` 在这个例子中,我们首先通过 `withTemplate()` 方法加载了一个 Excel 模板文件。然后,我们创建了一个 Map 集合,用来存储要填充的数据。接着,我们使用 `getSheet()` 方法获取了要填充数据的 sheet 对象,并使用 `fill()` 方法来填充数据。在填充数据时,我们使用了占位符 ${name}、${age} 和 ${gender} 来标识数据的位置。最后,我们调用 `finish()` 方法来保存文件并关闭 ExcelWriter 对象。 需要注意的是,在使用 Excel 模板时,占位符的格式和位置需要与模板中的格式和位置一致,否则填充的数据可能会出现错位或者无法填充的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值