新闻动态

良好的口碑是企业发展的动力

easyexcel maven

发布时间:2025-02-21 08:10:28 点击量:9
自适应网站

 

EasyExcel Maven 使用指南

EasyExcel 是阿里巴巴开源的一个基于 Java 的简单、省内存的读写 Excel 的开源项目。它支持读取和写入 Excel 文件,并且具有高性能、低内存占用的特点。EasyExcel 非常适合处理大数据量的 Excel 文件,尤其是在内存有限的环境中。本文将详细介绍如何使用 Maven 引入 EasyExcel,并展示如何通过 EasyExcel 进行 Excel 文件的读写操作。

1. Maven 引入 EasyExcel

首先,我们需要在 Maven 项目中引入 EasyExcel 的依赖。打开项目的 pom.xml 文件,添加以下依赖:

<dependencies>
    <!-- EasyExcel 核心依赖 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.1.1</version>
    </dependency>

    <!-- 可选:如果需要使用 Lombok 简化代码 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
        <scope>provided</scope>
    </dependency>

    <!-- 可选:如果需要使用 Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.5.6</version>
    </dependency>
</dependencies>

2. 创建实体类

在读取或写入 Excel 文件时,通常需要定义一个与 Excel 表格结构对应的实体类。假设我们要处理一个包含用户信息的 Excel 文件,表格结构如下:

姓名 年龄 邮箱
张三 25 zhangsan@example.com
李四 30 lisi@example.com

我们可以定义一个 User 类来表示这个结构:

import com.alibaba.excel.annotation.ExcelProperty;

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

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

    @ExcelProperty("邮箱")
    private String email;

    // Getters and 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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

3. 读取 Excel 文件

接下来,我们展示如何使用 EasyExcel 读取 Excel 文件中的数据。假设我们有一个名为 users.xlsx 的文件,内容与上面提到的表格结构一致。

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ReadListener;

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

public class ExcelReader {

    public static void main(String[] args) {
        String fileName = "users.xlsx";
        List<User> userList = new ArrayList<>();

        // 读取 Excel 文件
        EasyExcel.read(fileName, User.class, new ReadListener<User>() {
            @Override
            public void invoke(User user, AnalysisContext context) {
                userList.add(user);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                System.out.println("数据读取完成");
            }
        }).sheet().doRead();

        // 打印读取到的数据
        for (User user : userList) {
            System.out.println(user.getName() + ", " + user.getAge() + ", " + user.getEmail());
        }
    }
}

在上面的代码中,我们使用 EasyExcel.read 方法读取 Excel 文件。User.class 指定了要将数据映射到的实体类。ReadListener 是一个回调接口,invoke 方法会在每次读取一行数据时被调用,doAfterAllAnalysed 方法在所有数据读取完成后被调用。

4. 写入 Excel 文件

除了读取 Excel 文件,EasyExcel 还可以用于将数据写入 Excel 文件。假设我们有一个 List<User>,我们想将这些数据写入一个名为 output.xlsx 的文件中。

import com.alibaba.excel.EasyExcel;

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

public class ExcelWriter {

    public static void main(String[] args) {
        String fileName = "output.xlsx";
        List<User> userList = new ArrayList<>();

        // 添加一些测试数据
        userList.add(new User("张三", 25, "zhangsan@example.com"));
        userList.add(new User("李四", 30, "lisi@example.com"));

        // 写入 Excel 文件
        EasyExcel.write(fileName, User.class).sheet("用户信息").doWrite(userList);

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

在这个例子中,我们使用 EasyExcel.write 方法将 List<User> 中的数据写入 Excel 文件。User.class 指定了数据的结构,sheet 方法指定了工作表的名称,doWrite 方法执行写入操作。

5. 处理大数据量

EasyExcel 的一个主要优势是它能够处理大数据量的 Excel 文件,而不会导致内存溢出。为了实现这一点,EasyExcel 使用了流式读写的方式,即逐行读取或写入数据,而不是一次性将整个文件加载到内存中。

例如,在读取大数据量的 Excel 文件时,我们仍然可以使用 ReadListener 接口,但需要注意在处理每一行数据时尽量减少内存占用:

EasyExcel.read(fileName, User.class, new ReadListener<User>() {
    @Override
    public void invoke(User user, AnalysisContext context) {
        // 处理每一行数据,例如直接写入数据库或进行其他操作
        processUser(user);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("数据读取完成");
    }
}).sheet().doRead();

6. 自定义 Excel 样式

EasyExcel 还支持自定义 Excel 文件的样式,例如设置单元格的字体、颜色、边框等。我们可以通过实现 WriteHandler 接口来自定义样式:

import com.alibaba.excel.write.handler.WriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.*;

public class CustomStyleHandler implements WriteHandler {

    @Override
    public void beforeSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) {}

    @Override
    public void afterSheetCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder) {
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setBold(true);
        font.setColor(IndexedColors.RED.getIndex());
        cellStyle.setFont(font);

        // 设置*行的样式
        Sheet sheet = writeSheetHolder.getSheet();
        Row row = sheet.getRow(0);
        for (Cell cell : row) {
            cell.setCellStyle(cellStyle);
        }
    }
}

在写入 Excel 文件时,我们可以通过 write 方法的 registerWriteHandler 方法来注册自定义的样式处理器:

EasyExcel.write(fileName, User.class)
        .registerWriteHandler(new CustomStyleHandler())
        .sheet("用户信息")
        .doWrite(userList);

7. 总结

EasyExcel 是一个功能强大且易于使用的 Excel 读写工具,特别适合处理大数据量的 Excel 文件。通过 Maven 引入 EasyExcel 依赖后,我们可以轻松地读取和写入 Excel 文件,并且可以自定义 Excel 的样式。希望本文的介绍能够帮助你快速上手 EasyExcel,并在实际项目中应用它。

扩展阅读

通过本文的学习,你应该能够掌握如何使用 EasyExcel 进行 Excel 文件的读写操作,并能够在实际项目中应用这些技能。如果你有更多的需求或问题,可以参考 EasyExcel 的官方文档或社区资源,获取更多的帮助。

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:dm@cn86.cn进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。本站原创内容未经允许不得转载。
下一篇: css content