使用EasyExcel按照模版导出excel文件

使用bootstrap的tableExport仅可导出简单格式的excel文件,导出复杂格式的excel需要使用easyexcel根据模版生成。

需要在pom中导入easyexcel2.1.6和poi3.17依赖。

设置模版:

单行填充使用{name },多行填充使用{.name}

使用EasyExcel按照模版导出excel文件_第1张图片

实体类加注解:

public class Student {
    @ExcelIgnore
    private Integer id;
    @ColumnWidth(20) 
    @ExcelProperty("姓名")
    private String name;
    @ColumnWidth(15) 
    @ExcelProperty("年龄")
    private String age;
   
}
@ColumnWidth():设置表头列宽
@ExcelProperty(index,value):index对应表头在第几列,从0开始。value对应表头名称。如果不设置表头默认使用字段名为表头,列顺序按照实体类字段顺序显示。
@ExcelIgnore:忽略扫描此字段,不在excel中填充。

Controller层代码:

@RequestMapping(value = "/exportList")
    @ResponseBody
    public void exportList(HttpServletResponse response, HttpServletRequest request) throws Exception {

        String fileName = "报表";
        //获取模版路径
        String templateFilePath= "D:\\模版.xls";
        //设置响应头内容,以vnd.ms-excel方式打开数据
        response.setContentType("application/vnd.ms-excel");
        //修改响应头信息
        response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName + "1.xls"));
        //告诉所有浏览器不要缓存
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        //设置时间值属性的响应头信息,不要缓存
        response.setDateHeader("Expires", -1);
        //(设置输出的编码格式)指定输出到客户端的时候,这些文字使用UTF-8编码
        response.setCharacterEncoding("UTF-8");

        //使用模版创建工作簿
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(),Student.class).withTemplate(templateFilePath).excelType(ExcelTypeEnum.XLS).build();
        WriteSheet sheet = EasyExcel.writerSheet().build();

           //开启自动换行,自动换行表示每次写入一条list数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为true
            FillConfig fillConfig =FillConfig.builder().forceNewRow(Boolean.TRUE).build();
           
            List infos=null;
             infos=waterInfoService.excelExport();
               
            HashMap mapFillData = new HashMap<>();
            mapFillData.put("date", "2023-4-23");

            

          //单行数据填充
          excelWriter.fill(mapFillData,sheet);
          //多行数据填充
          excelWriter.write(infos,sheet);
          //关闭流
          excelWriter.finish();
       }
EasyExcel.write(response.getOutputStream(),实体类的class).withTemplate(模版路径).excelType(ExcelTypeEnum.XLS).build();

EasyExcel默认excel文件后缀xlsx,如果要使用xls文件,需要设置excelType(ExcelTypeEnum.XLS)。

使用write()方法会自动关闭流,使用fill()方法需要手动关闭流。

生成文件如图:

使用EasyExcel按照模版导出excel文件_第2张图片


你可能感兴趣的:(excel)