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

相关推荐
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
昵称为空C3 天前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
于先生吖4 天前
SpringBoot对接大模型开发AI命理测算系统:八字排盘与AI解析接口源码全解
人工智能·spring boot·后端
Flittly4 天前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring
星落zx4 天前
Spring Boot 多模型集成:优雅调用全球主流大模型
人工智能·spring boot·chatgpt
一杯奶茶¥4 天前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
进阶的小名4 天前
Spring Boot SSE + Nginx 配置:解决 EventSource 不实时返回、连接超时、流式响应被缓冲问题
spring boot·后端·nginx
我登哥MVP4 天前
SpringCloud Alibaba 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven