EasyExcel单文件导出基本流程 学习笔记(持续更新)

EasyExcel导出文件基本流程

方式一:导出到 HTTP 响应

获取数据

首先获得需要导出的文件的数据内容,用一个 list保存

List<SysStudent> list = sysStudentService.queryList(sysStudent);

定义文件名

给导出的文件定义一个名字,可以添加日期或者根据输入添加其他信息,保证文件名唯一

String fileName = "学生信息列表" + System.currentTimeMillis() + ".xlsx";

设置响应头

  1. 设置响应的内容类型为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  2. 设置响应的字符编码为 UTF-8
  3. 设置响应头 Content-disposition attachment,表示文件将以附件形式下载,并指定文件名编码为 UTF-8

ContentType有很多不同的类型,要根据数据类型改变

  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:Excel 文件(.xlsx)
  • application/vnd.ms-excel:Excel 文件(.xls)
   response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
   response.setCharacterEncoding("UTF-8");
   response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLEncoder.encode(fileName, "UTF-8"));

easyexcel执行导出

使用 EasyExcel 库将数据写入 Excel 文件

  • response.getOutputStream() 获取响应的输出流
  • SysStudent.class指定数据模型类
  • sheet("学生信息列表") 设置工作表的名称
  • doWrite(list) 将数据写入工作表
   EasyExcel.write(response.getOutputStream(), SysStudent.class).sheet("学生信息列表").doWrite(list);

方式二:导出到本地文件

获取数据

与方式一相同,这里省略

定义文件名

与方式一相同,这里省略

easyexcel执行导出

  1. 创建一个Excel写入对象excelWriter,指定文件名和数据类型
  2. 构建一个工作表对象writeSheet,并设置表名
  3. 使用excelWriter将列表list中的数据写入到writeSheet
  4. 完成写操作并关闭资源。
	ExcelWriter excelWriter = EasyExcel.write(fileName, SysStudent.class).build();
	WriteSheet writeSheet = EasyExcel.writerSheet("学生信息列表").build();
	excelWriter.write(list, writeSheet);
	excelWriter.finish();

例子

这里实现了一个学生信息列表导出的接口,根据以上步骤完成导出

方式1
	@PostMapping("/export")
    @ResponseBody
    public void export(HttpServletResponse response, SysStudent sysStudent) throws IOException {
        // 1.获取数据
        List<SysStudent> list = sysStudentService.queryList(sysStudent);
        // 2.定义文件名
        String fileName = "学生信息列表" + System.currentTimeMillis() + ".xlsx";
        // 3.设置相应头
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''"
                + URLEncoder.encode(fileName, "UTF-8"));
        // 4.easyexcel执行文件导出
        EasyExcel.write(response.getOutputStream(), SysStudent.class).sheet("学生信息列表")
                .doWrite(list);
    }
方式2
    @PostMapping("/export")
    @ResponseBody
    public void export(HttpServletResponse response, SysStudent sysStudent) throws IOException {

        // 1.获取数据
        List<SysStudent> list = sysStudentService.queryList(sysStudent);
        // 2.定义文件名
        String fileName = "学生信息列表" + System.currentTimeMillis() + ".xlsx";
        // 3.easyexcel执行文件导出
        ExcelWriter excelWriter = EasyExcel.write(fileName, SysStudent.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("学生信息列表").build();
        excelWriter.write(list, writeSheet);
        excelWriter.finish();
    }

常见问题(持续更新)

EasyExcel导出文件名乱码

出现这个问题通常有以下几个原因:

  1. 文件名编码不正确
    • 使用 URLEncoder.encode 并确保编码为 UTF-8。
    • 替换空格为 %20 如:.replaceAll("\\+", "%20")
  2. 响应头设置不正确,检查一下Content-TypeContent-Disposition
  3. 浏览器兼容性问题
    postman中测试没有问题,但是在浏览器中下载会出现问题,是因为不同浏览器对 Content-Disposition 的处理方式不同,需要根据浏览器类型设置不同的Content-Disposition
postman测试没有返回附件
  1. 检查 easyexcel的依赖是否正确,与项目的jdk版本是否一致
  2. 检查是否采用http响应方式通过附件下载excel,否则应该检查文件名所以定义的位置是否存在。默认会在项目同级子目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着猪看大海

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值