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

相关推荐
小贝IT~2 小时前
基于SpringBoot的图书个性化推荐系统-048
java·spring boot·后端
断春风2 小时前
SpringBoot 集成 XXL-JOB
java·spring boot·后端
橘子海全栈攻城狮2 小时前
【最新源码】基于springboot的会议室预订系统设计与实现 014
java·开发语言·前端·spring boot·后端·spring·自动化
计算机毕设指导64 小时前
基于微信小程序的积分制零食自选平台【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
QK芒果小洛4 小时前
Springboot 接口校验数组中的对象的方式
java·spring boot·后端
qq_12498707534 小时前
基于微信小程序的民宿预订系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·毕业设计
GEM的左耳返5 小时前
互联网大厂Java求职面试题解析与实战指导:涵盖核心技术栈与业务场景
java·数据库·spring boot·安全·微服务·消息队列·面试题
憧憬少5 小时前
通过切换Service实现类来切换看板数据来源
java·spring boot
千寻技术帮5 小时前
10400_基于Springboot的职业教育管理系统
java·spring boot·后端·毕设·文档·职业教育