EasyExcel工具的使用指南

在现代数据处理和分析中,Excel 文件是不可或缺的一部分。然而,手动处理大量数据不仅耗时,而且容易出错。为了提高效率和准确性,许多开发者选择使用自动化工具来处理 Excel 文件。EasyExcel 就是这样一款强大的 Java 库,它能够帮助开发者轻松地读取、写入和操作 Excel 文件。下面将详细介绍 EasyExcel 工具的使用方法,帮助你快速上手并掌握其核心功能。

1. 什么是 EasyExcel?

EasyExcel 是一个基于 Java 的 Excel 操作库,它提供了丰富的 API 来处理 Excel 文件。无论是简单的读写操作,还是复杂的数据处理和格式化,EasyExcel 都能轻松应对。它支持多种 Excel 格式,包括 .xls.xlsx,并且兼容多种数据源,如数据库、CSV 文件等。EasyExcel 的设计理念是简单易用,性能高效,特别适合处理大文件。

2. 安装与配置

2.1 引入依赖

在使用 EasyExcel 之前,首先需要在你的项目中引入相关的依赖。如果你使用的是 Maven 项目,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>

在这里插入图片描述

2.2 初始化 EasyExcel

在项目中引入依赖后,你可以通过以下方式初始化 EasyExcel:

import com.alibaba.excel.EasyExcel;

public class EasyExcelExample {
    public static void main(String[] args) {
        // EasyExcel 初始化
    }
}

3. 核心功能

3.1 读取 Excel 文件

EasyExcel 提供了多种方式来读取 Excel 文件,包括基于事件模型的读取和基于注解的读取。事件模型适用于处理大文件,而注解读取则适用于小文件。

3.1.1 准备数据模型
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

import java.util.Date;

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

    @ExcelProperty("密码")
    private String password;

    @ExcelProperty("生日")
    private Date birthday;

    @ExcelProperty("薪资")
    private Double salary;
}
3.1.2 准备excel文件

在项目的data目录下准备一份excel文件,文件名称:emp.xlsx,sheet页名称:员工信息,文件详情信息如下:
在这里插入图片描述

3.1.3 事件模型读取
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.io.File;

public class ExcelReader01 {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";

        EasyExcel.read(filePath, ExcelEmpData.class, new AnalysisEventListener<ExcelEmpData>() {
            @Override
            public void invoke(ExcelEmpData data, AnalysisContext context) {
                // 处理每一行数据
                System.out.println(data);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                // 所有数据解析完成后的操作
                System.out.println("All data analysed.");
            }
        }).sheet("员工信息").doRead();
    }
}
3.1.4 注解读取
import com.alibaba.excel.EasyExcel;

import java.io.File;
import java.util.List;

public class ExcelReader02 {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";

        List<ExcelEmpData> dataList = EasyExcel.read(filePath)
                .head(ExcelEmpData.class)
                .sheet()
                .doReadSync();

        dataList.forEach(data -> {
            // 处理每一行数据
            System.out.println(data);
        });
    }
}

在这里插入图片描述

3.2 写入 Excel 文件

EasyExcel 提供了简单易用的 API 来生成 Excel 文件。你可以通过 EasyExcel.write 方法来创建 Excel 文件,并设置样式、格式等。

import com.alibaba.excel.EasyExcel;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ExcelWriter01 {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";

        List<ExcelEmpData> data = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ExcelEmpData empData = new ExcelEmpData();
            empData.setName("员工" + i);
            empData.setPassword("pw" + i);
            empData.setBirthday(new Date());
            empData.setSalary(10000.0 + i * 100.0);
            data.add(empData);
        }

        EasyExcel.write(filePath, ExcelEmpData.class).sheet("员工信息").doWrite(data);
    }
}

3.3 数据处理与格式化

EasyExcel 支持对 Excel 数据进行各种处理和格式化操作。你可以通过注解来定义数据的格式、样式等。

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;

import lombok.Data;

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

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

    @ExcelProperty("出生日期")
    @DateTimeFormat("yyyy-MM-dd")
    private Date birthDate;
}

3.4 自定义样式

EasyExcel 允许你自定义 Excel 文件的样式,包括字体、颜色、边框等。你可以通过 WriteCellStyleHorizontalCellStyleStrategy 来设置样式。

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ExcelStyleExample {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";

        List<ExcelEmpData> data = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ExcelEmpData empData = new ExcelEmpData();
            empData.setName("员工" + i);
            empData.setPassword("pw" + i);
            empData.setBirthday(new Date());
            empData.setSalary(10000.0 + i * 100.0);
            data.add(empData);
        }// 获取数据列表

        // 设置表头样式
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 12);
        headWriteFont.setColor(IndexedColors.RED.getIndex()); // 设置字体颜色
        headWriteCellStyle.setWriteFont(headWriteFont);

        // 设置内容样式
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.RIGHT);

        // 创建样式策略
        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

        EasyExcel.write(filePath, ExcelEmpData.class)
                .registerWriteHandler(horizontalCellStyleStrategy) // 注册样式策略
                .sheet("员工信息") // 设置工作表名称
                .doWrite(data); // 写入数据
    }
}

代码说明:

  1. 设置表头样式
    • 使用 WriteCellStyle 类来定义表头的样式。
    • 使用 setFillForegroundColor 方法设置表头的背景颜色,这里我们使用了 IndexedColors.GREY_25_PERCENT.getIndex() 来设置灰色背景。
    • 使用 WriteFont 类来定义表头的字体样式。
    • 使用 setColor 方法设置表头的字体颜色,这里我们使用了 IndexedColors.RED.getIndex() 来设置红色字体。
  2. 设置内容样式
    • 使用 WriteCellStyle 类来定义内容的样式。
    • 使用 setHorizontalAlignment 方法设置内容的水平对齐方式,这里我们使用了 HorizontalAlignment.RIGHT 来设置右对齐。
  3. 创建样式策略
    • 使用 HorizontalCellStyleStrategy 类来创建一个样式策略,将表头样式和内容样式结合起来。

在这里插入图片描述

4. 高级功能

4.2 自定义模板

EasyExcel 支持使用自定义模板来生成 Excel 文件。你可以通过 EasyExcel.write 方法的 template 参数来指定模板文件。

import com.alibaba.excel.EasyExcel;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class TemplateExample {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";
        String templatePath = path + File.separator + "data" + File.separator + "file.xlsx";

        List<ExcelEmpData> data = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            ExcelEmpData empData = new ExcelEmpData();
            empData.setName("员工" + i);
            empData.setPassword("pw" + i);
            empData.setBirthday(new Date());
            empData.setSalary(10000.0 + i * 100.0);
            data.add(empData);
        }


        EasyExcel.write(filePath, ExcelEmpData.class)
                .needHead(false) // 设置首行不写入
                .withTemplate(templatePath) // 使用模板文件
                .sheet("Sheet1") // 设置工作表名称
                .doWrite(data); // 写入数据
    }
}

4.3 数据校验

EasyExcel 提供了数据校验功能,可以在读取数据时进行校验,确保数据的准确性。

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

import java.io.File;

public class DataValidationExample {
    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        // String filePath = path + File.separator + "aJavaBasic" + File.separator + "data" + File.separator + "emp.xlsx";
        String filePath = path + File.separator + "data" + File.separator + "emp.xlsx";

        EasyExcel.read(filePath, ExcelEmpData.class, new AnalysisEventListener<ExcelEmpData>() {
            @Override
            public void invoke(ExcelEmpData emp, AnalysisContext context) {
                if (emp.getSalary() < 10300) {
                    throw new RuntimeException("Invalid salary: " + emp.getSalary());
                }
                // 处理每一行数据
                System.out.println(emp);
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                // 所有数据解析完成后的操作
                System.out.println("All data analysed.");
            }
        }).sheet().doRead();
    }
}

在这里插入图片描述

5. 总结

EasyExcel 是一个功能强大且易于使用的 Java 库,适用于各种 Excel 文件的处理需求。无论是简单的读写操作,还是复杂的数据处理和格式化,EasyExcel 都能提供高效的解决方案。通过本文的介绍,你应该已经掌握了 EasyExcel 的基本使用方法,并能够将其应用到实际项目中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenBright

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值