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

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

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

设置模版:

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

实体类加注解:

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<Student> infos=null;
             infos=waterInfoService.excelExport();
               
            HashMap<String, String> 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()方法需要手动关闭流。

生成文件如图:

 

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 EasyExcel 结合 Ajax 实现模板导出 Excel 的功能,具体步骤如下: 1. 在前端页面中使用 Ajax 向后端发送请求,请求获取 Excel 数据; 2. 后端根据请求参数生成 Excel 数据,并利用 EasyExcel 将数据写入 Excel 模板; 3. 后端将生成的 Excel 文件流返回给前端; 4. 前端利用 Blob 对象创建文件流,并使用 FileSaver.js 将文件保存至本地。 以下是一个简单的示例代码: 前端代码: ```javascript function exportExcel() { $.ajax({ url: '/excel/export', type: 'POST', dataType: 'json', success: function(res) { var blob = new Blob([res], { type: 'application/vnd.ms-excel' }); saveAs(blob, 'example.xlsx'); }, }); } ``` 后端代码: ```java @PostMapping("/excel/export") public void exportExcel(HttpServletResponse response) throws IOException { // 获取 Excel 数据并填充至模板中 List<ExcelData> dataList = getDataList(); InputStream inputStream = getClass().getResourceAsStream("/templates/example.xlsx"); OutputStream outputStream = response.getOutputStream(); EasyExcel.write(outputStream).withTemplate(inputStream).sheet().doFill(dataList); // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=example.xlsx"); response.flushBuffer(); } ``` 其中,`getDataList()` 方法用于获取 Excel 数据,`example.xlsx` 是 Excel 模板文件。需要注意的是,EasyExcel 需要在后端项目中引入依赖,同时在前端页面中引入 FileSaver.js。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值