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

相关推荐
利刃大大2 小时前
【SpringBoot】Spring事务 && @Transactional详解 && Spring事务失效问题
spring boot·spring·事务
㳺三才人子4 小时前
初探 Spring Framework OncePerRequestFilter
spring boot·spring·junit
这是程序猿4 小时前
基于java的ssm框架学生作业管理系统
java·开发语言·spring boot·spring·学生作业管理系统
源码获取_wx:Fegn08955 小时前
基于springboot + vue小区人脸识别门禁系统
java·开发语言·vue.js·spring boot·后端·spring
Ahtacca7 小时前
Linux环境下前后端分离项目(Spring Boot + Vue)手动部署全流程指南
linux·运维·服务器·vue.js·spring boot·笔记
AC赳赳老秦7 小时前
政务数据处理:DeepSeek 适配国产化环境的统计分析与报告生成
开发语言·hadoop·spring boot·postgresql·测试用例·政务·deepseek
计算机毕设VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue小区人脸识别门禁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
让我上个超影吧11 小时前
基于SpringBoot和Vue实现CAS单点登录
前端·vue.js·spring boot
利刃大大12 小时前
【SpringBoot】validation参数校验 && JWT鉴权实现 && 加密/加盐
java·spring boot·jwt·加密