easyexcel的基本使用

EasyExcel 快速复习

一、什么是 EasyExcel?

EasyExcel 是阿里巴巴开源的基于 Java 的 Excel 操作库,核心目标是 低内存、高性能 地读写 Excel(支持 .xls 和 .xlsx)。

通俗理解:

EasyExcel 就是 Spring Boot 中 Java 对象(List)与 Excel 文件双向交互的技术。

主要场景:

Java 对象(List) → 写入 Excel 并导出(导出报表)

Excel 文件 → 读取数据并转换为 Java 对象(导入数据)

二、掌握 EasyExcel 需要搞懂的三个问题

  1. Excel 的基本概念(开发视角)

    工作簿(Workbook):一个 Excel 文件(如 order.xlsx)

    工作表(Sheet):一个文件中的多个标签页(Sheet1、Sheet2...)

    表头(Header):第一行,通常用于描述字段含义(如"姓名""年龄")

    数据行(Row):表头以下的每一行,对应一条业务数据

    单元格(Cell):行与列交叉的最小单位

    在 EasyExcel 中,我们通常用一个 Java 实体类 对应 Excel 的 一列(字段),一个 List<实体> 对应 多行数据。

  2. 如何在 Spring Boot 中引入 EasyExcel?

    这个核心在处理依赖兼容匹配

    在 pom.xml 中添加依赖(最新稳定版):

xml 复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.3</version> <!-- 2025 年主流版本 -->
</dependency>

注意:无需额外配置,直接在 Service 或 Controller 中使用即可。

  1. 交互步骤与最佳实践
    ✅ 场景一:导出 Excel(Java List → Excel)
    步骤:

定义实体类,并用 @ExcelProperty("姓名") 标注字段

准备 List 数据

使用 EasyExcel.write(outputStream, clazz).sheet("Sheet1").doWrite(list)

示例:

// 实体类

java 复制代码
public class User {
    @ExcelProperty("用户ID")
    private Long id;
    
    @ExcelProperty("姓名")
    private String name;
    
    @ExcelProperty("邮箱")
    private String email;}

✅ 场景二:导入 Excel(Excel → Java List)

步骤:

定义同样的实体类(带 @ExcelProperty)

接收前端上传的 MultipartFile

使用 EasyExcel.read(file.getInputStream(), clazz, listener).sheet().doRead()

通过 监听器(ReadListener) 分批处理数据(避免 OOM)

监听器示例:

java 复制代码
public class UserExcelListener extends AnalysisEventListener<User> {
    private static final int BATCH_COUNT = 1000;
    private List<User> list = new ArrayList<>();

    @Override
    public void invoke(User user, AnalysisContext context) {
        list.add(user);
        if (list.size() >= BATCH_COUNT) {
            // 批量保存到数据库
            saveData(list);

Controller 接收:

java 复制代码
@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) {
    try {
        EasyExcel.read(file.getInputStream(), User.class, new UserExcelListener())
                 .sheet()
                 .doRead();
    } catch (Exception e) {
        throw new RuntimeException("导入失败", e);
    }
    return "success";

三、最佳实践总结

✅ 实体类必须用 @ExcelProperty 标注字段顺序或名称

✅ 导入务必使用 监听器 + 分批处理,防止内存溢出(OOM)

✅ 导出大文件可考虑 分页查询 + 流式写入

✅ 支持自定义样式、合并单元格、下拉框等(进阶用法)

✅ 文件后缀:.xlsx 是默认格式,.xls 需额外注意兼容性(不推荐)

四、常用命令速查

功能

代码示例

导出

EasyExcel.write(outputStream, Class).sheet().doWrite(list)

导入

EasyExcel.read(inputStream, Class, listener).sheet().doRead()

注解

@ExcelProperty("列名")、@ColumnWidth(20)、@DateTimeFormat("yyyy-MM-dd")

通过以上内容,你已经掌握了 EasyExcel 的核心思想和实战用法。

重点记住:对象 ↔ Excel,靠注解对齐;大数据读写,靠监听器分批处理。

相关推荐
专业程序开发源1 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
莫逸风2 小时前
【毕设源码二期01】校园失物招领系统:从发布线索到核验交接
spring boot·毕业设计·课程设计·react
vx_Biye_Design2 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
Thomas.Sir4 小时前
第2课:SpringBoot4.x 项目构建:Maven/Gradle配置详解,父工程与依赖管理
java·spring boot
不像程序员的程序媛9 小时前
springboot支持的web容器
前端·spring boot·后端
计算机毕设定制辅导-无忧学长10 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统
Thomas.Sir10 小时前
第3课:SpringBoot4.x 自动配置原理:@EnableAutoConfiguration底层源码剖析
java·spring boot
devilnumber11 小时前
springboot的保护机制怎么实现的,为何能做到服务不宕机
java·spring boot·后端
小蒜学长1 天前
基于Spring Boot+Vue3的在线游戏技术指导师匹配系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·在线游戏技术指导
weixin_BYSJ19871 天前
【计算机毕设】房屋租赁系统02647
java·vue.js·spring boot·python·django·课程设计