从零开始学习EasyExcel:一步步构建你的第一个应用

2025-04发布14次浏览

EasyExcel 是阿里巴巴开源的一个基于 Java 的 Excel 处理库,它以高效、简单易用著称。相比于传统的 Apache POI 等工具,EasyExcel 通过流式读取和写入大大降低了内存占用,非常适合处理大文件。本文将从零开始学习 EasyExcel,并一步步构建你的第一个应用。


一、准备工作

1.1 环境搭建

在开始之前,请确保你已经安装了以下环境:

  • JDK 8 或更高版本
  • Maven 构建工具

1.2 引入依赖

pom.xml 文件中添加 EasyExcel 的 Maven 依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version> <!-- 版本号请根据实际情况调整 -->
</dependency>

1.3 创建项目结构

创建一个简单的 Maven 项目,包含以下目录结构:

src/main/java/com/example/easyexcel/

二、编写数据模型类

EasyExcel 需要一个与 Excel 表格对应的实体类。假设我们要处理一个员工信息表,包含姓名、年龄和职位字段。

2.1 定义实体类

创建一个名为 Employee.java 的类:

package com.example.easyexcel;

import com.alibaba.excel.annotation.ExcelProperty;

public class Employee {
    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    @ExcelProperty("职位")
    private String position;

    // Getters 和 Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", position='" + position + '\'' +
                '}';
    }
}

三、实现 Excel 写入功能

3.1 编写写入逻辑

创建一个名为 ExcelWriter.java 的类,用于将数据写入 Excel 文件:

package com.example.easyexcel;

import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.List;

public class ExcelWriter {
    public static void main(String[] args) {
        // 设置输出文件路径
        String fileName = "employees.xlsx";

        // 准备数据
        List<Employee> data = new ArrayList<>();
        data.add(new Employee("张三", 28, "开发工程师"));
        data.add(new Employee("李四", 30, "产品经理"));
        data.add(new Employee("王五", 25, "测试工程师"));

        // 写入 Excel
        EasyExcel.write(fileName, Employee.class).sheet("员工信息").doWrite(data);

        System.out.println("写入完成!");
    }
}

运行上述代码后,会在项目的根目录生成一个名为 employees.xlsx 的文件,其中包含员工信息。


四、实现 Excel 读取功能

4.1 编写读取逻辑

创建一个名为 ExcelReader.java 的类,用于读取 Excel 文件中的数据:

package com.example.easyexcel;

import com.alibaba.excel.EasyExcel;

import java.util.List;

public class ExcelReader {
    public static void main(String[] args) {
        // 设置输入文件路径
        String fileName = "employees.xlsx";

        // 读取 Excel
        List<Employee> employeeList = EasyExcel.read(fileName)
                .head(Employee.class)
                .sheet()
                .doReadSync();

        // 打印结果
        for (Employee employee : employeeList) {
            System.out.println(employee);
        }
    }
}

运行上述代码后,程序会读取 employees.xlsx 文件中的数据并打印到控制台。


五、优化:处理大数据量

当处理大数据量时,使用默认的同步读取方式可能会导致内存溢出。EasyExcel 提供了分批读取的功能。

5.1 分批读取示例

修改 ExcelReader.java 中的代码如下:

package com.example.easyexcel;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

public class ExcelReaderWithBatch {
    public static void main(String[] args) {
        String fileName = "employees.xlsx";

        EasyExcel.read(fileName, Employee.class, new AnalysisEventListener<Employee>() {
            @Override
            public void invoke(Employee employee, AnalysisContext analysisContext) {
                System.out.println("解析到一条数据: " + employee);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("所有数据解析完成!");
            }
        }).sheet().doRead();
    }
}

上述代码通过监听器的方式逐条解析数据,避免一次性加载所有数据到内存中。


六、总结

通过本文的学习,我们掌握了 EasyExcel 的基本使用方法,包括:

  1. 如何定义数据模型类。
  2. 如何实现 Excel 的写入和读取功能。
  3. 如何优化大数据量的读取操作。

EasyExcel 的强大之处在于其简洁的 API 和高效的性能,尤其适合需要频繁处理 Excel 文件的场景。