EasyExcel通过模板文件循环导出excel

该方法为通过easyExel固定模板文件导出复杂表头及格式的excel处理方法

1、依赖

XML 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.2</version>
</dependency>

2、EasyExcelUtil工具类

java 复制代码
    /**
     *
     * @param response
     * @param inputStream 导出模板的 is
     * @param fileName 导出附件名称
     * @param dateList 导出数据
     */
    public static  void exportByTemplate(HttpServletResponse response , InputStream inputStream, String fileName, List dateList){
//        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/aa.xlsx");//读取导出模板
        try (ServletOutputStream outputStream = response.getOutputStream()){
           response.setContentType("applicaiotn/vnd.openxmlformates-officedocument.spreadsheetml.sheet");
           response.setCharacterEncoding("UTF-8");
            String encodingFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition","attachment;filename="+encodingFileName+".xlsx");
            ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            if (dateList.size()>0){
                excelWriter.fill(new FillWrapper("data",dateList),fillConfig,writeSheet);//data为模板中循环数据的占位符{data}
            }
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

3、模板