EasyExcel使用模板填充数据

发布时间 2023-10-13 22:51:14作者: Mr_sven
public void fillExcel(HttpServletResponse response) throws IOException {
        ServletOutputStream out = response.getOutputStream();
        response.setContentType("multipart/form-data");
        response.setCharacterEncoding("UTF-8");
        //文件名字
        String fileName = "demo.xlsx";
        response.setHeader("Content-disposition", "attachment;filename=" +fileName);
        //文件模板输入流,将excel模板放到resources目录下
        InputStream inputStream = new ClassPathResource("templates/demo.xlsx").getInputStream();
 
        //标题数据
        FillTitle fillTitle = new FillTitle();
        fillTitle.setTitleDate(new Date());
        //列表数据
        List<FillData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            FillData fillData = new FillData();
            fillData.setName("张三");
            fillData.setNumber(5.2);
            list.add(fillData);
        }
 
        ExcelWriter writer = EasyExcel.write(out).withTemplate(inputStream).build();
        WriteSheet sheet = EasyExcel.writerSheet(0).build();
        //填充列表开启自动换行,自动换行表示每次写入一条list数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为true
        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
        //填充标题
        writer.fill(fillTitle,sheet);
        //填充数据
        writer.fill(list,fillConfig,sheet);
        //填充完成
        writer.finish();
        out.flush();
 
    }

标题实体类,数据实体类

@Data
public class FillData {
    private String name;
    private double number;
    private Date date;
}
 
 
@Data
public class FillTitle {
    private Date titleDate;
}

 

 


 

注意:

当打包成jar时,读取resources下的excel会遇到报错,此时添加如下maven配置

<plugins>
<!-- 让maven不编译xls文件,但仍将其打包 -->
    <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
           <configuration>
               <nonFilteredFileExtensions>
                   <nonFilteredFileExtension>xls</nonFilteredFileExtension>

            <!--不加这一行,xlsx文件会被过滤,然后在maven build的时候,去target下看对应的xlsx就是损坏的-->

                   <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
               </nonFilteredFileExtensions>
           </configuration>
    </plugin>
</plugins>

分析:
maven中默认只能读取resources文件夹下的资源,如果要读取其他路径下的资源文件,那么就需要用到maven-resources-plugin这一插件,然后我们无法打开下载的excel文件有可能是因为编译后的文件与我们本地文件不一样;于是我们需要加上配置代码,让tomcat不编译该类文件即可;