大家好,我是“不想打工的码农”。
上周我给一个做淘宝店的朋友做了个订单后台,功能很简单:增删改查。
结果他今天突然微信我:“老哥,能不能加个‘导出Excel’?我想把订单拉出来发给仓库。”
说实话,以前听到“导出Excel”,我心里是发怵的——POI?HSSF?SXSSF?光名字就劝退。但这次,我只用了3行核心代码,10分钟搞定!
秘诀就是:EasyExcel。
EasyExcel 是阿里巴巴开源的 Excel 处理工具,主打“简单、快速、省内存”。对只会 CRUD 的我们来说,简直是天降神兵!
一、为什么不用 POI?因为 EasyExcel 真的“Easy”!
- POI 写法复杂:要手动创建 Workbook、Sheet、Row、Cell……代码又长又容易错。
- 内存爆炸风险:导出1万条数据,POI 可能把服务器干崩。
- EasyExcel 一行注解搞定:自动映射对象字段到 Excel 列,流式写入不占内存。
一句话:用 EasyExcel,你只需要关心“导什么”,不用管“怎么导”。
二、实战:给学生管理系统加上“导出”功能
我们接着上两期的「学生信息管理系统」来升级。目标:点击按钮,下载 students.xlsx 文件。
第1步:引入依赖(1分钟)
在 pom.xml 中添加:
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.3.2</version> <!-- 使用最新稳定版 --></dependency>第2步:创建 Excel 导出模型(2分钟)
新建一个类 StudentExcelVO.java(VO = View Object):
import com.alibaba.excel.annotation.ExcelProperty;public class StudentExcelVO { @ExcelProperty("学号") private Integer id; @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; @ExcelProperty("邮箱") private String email; // 必须有 getter/setter(可用 Lombok @Data)}注意:这里用 @ExcelProperty("列名") 指定 Excel 表头,和数据库字段无关!
第3步:写导出接口(核心!3行代码)
在 StudentController 里新增方法:
@GetMapping("/export")public void export(HttpServletResponse response) throws IOException { // 1. 查询所有学生数据 List<Student> students = studentMapper.selectList(null); // 2. 转换为 Excel VO 列表 List<StudentExcelVO> excelList = students.stream() .map(s -> { StudentExcelVO vo = new StudentExcelVO(); vo.setId(s.getId()); vo.setName(s.getName()); vo.setAge(s.getAge()); vo.setEmail(s.getEmail()); return vo; }).collect(Collectors.toList()); // 3. 三行导出代码! response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment;filename=students.xlsx"); EasyExcel.write(response.getOutputStream(), StudentExcelVO.class).sheet("学生列表").doWrite(excelList);}看!真正的导出逻辑就最后一行!
前面两行只是设置响应头,告诉浏览器:“这是个 Excel 文件,请下载”。
三、前端加个“导出”按钮(1分钟)
在你上期做的 Vue 前端页面里,加一个按钮:
<el-button type="success" @click="exportExcel">导出Excel</el-button>再加一个方法:
const exportExcel = () => { window.open('http://localhost:8080/student/export', '_blank')}搞定!点击按钮,文件自动下载!

四、避坑指南:新手常踩的3个雷
- 中文乱码?
确保你的项目编码是 UTF-8(IDEA 默认就是),一般不会有问题。 - 文件打不开?
检查是否漏了 response.setContentType 和 Content-Disposition 这两行——它们决定了浏览器如何处理响应。 - 大文件卡死?
EasyExcel 默认就是流式写入,10万行数据也稳如老狗。放心用!
五、结语:你的系统,离“商用”又近了一步
现在,你的学生管理系统已经具备:
✅ 增删改查
✅ 前端界面
✅ Excel导出
这已经超过80%的小型管理需求了!你可以把它包装成“通用后台模板”,下次接单直接复用,效率翻倍。
我是“不想打工的码农”,一个正在用“小功能”堆砌大未来的普通人。下期见!
#SpringBoot##java操作Excel库对比之poi与EasyExcel区别##Java开发##程序员副业##Excel导出神器##后端开发##代码教程##不想打工的码农