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,靠注解对齐;大数据读写,靠监听器分批处理。

相关推荐
BlockChain88816 小时前
SpringBoot实战一:10分钟搭建企业级用户管理系统(20000字完整项目)
java·spring boot·后端
拽着尾巴的鱼儿17 小时前
Springboot 缓存@Cacheable 使用
spring boot·后端·缓存
麦兜*17 小时前
SpringBoot Profile多环境配置详解,一套配置应对所有场景
java·数据库·spring boot
像少年啦飞驰点、17 小时前
Java大厂面试真题:Spring Boot + Kafka + Redis 在电商场景下的实战应用
java·spring boot·redis·分布式·kafka·面试题·电商秒杀
ITUnicorn18 小时前
【Vue2+SpringBoot在线商城】13-本项目运用到的技术
java·spring boot·redis·后端
空空kkk18 小时前
Spring Boot项目的搭建
java·spring boot·后端
每天学习一丢丢18 小时前
Spring Boot 调用泛微 E9 Token 认证 + 创建流程完整教程
java·spring boot·后端
没有bug.的程序员18 小时前
Spring Boot 启动原理:从 @SpringBootApplication 到自动配置深度解析
java·spring boot·后端·python·springboot·application
gAlAxy...18 小时前
Spring Boot 详细学习指南(上篇):核心概念 + 环境搭建 + HelloWorld 实战
java·spring boot·后端