前言
工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架
小编之前呢就知道Java 解析、生成 Excel 比较有名的框架有 Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,poi 有一套 SAX 模式的 API 可以一定程度的解决一些内存溢出的问题,但仍有一些缺陷,比如版本兼容、代码臃肿等。
下面小编推荐给大家看一款非常好用的表格开源框架EasyExcelAlibaba 的 开源的一款快速、简单、可避免 OOM 的 java 处理 Excel 工具。easyexcel 重写了 poi 对 07 版 Excel 的解析,对原本一个 3M 的 excel 用 POI sax 需要 100M 左右的内存降低到几 M,并且再大的 excel 也不会出现内存溢出。
那我们就话不多说,赶紧上代码干货!

一、EasyExcel安装

环境要求:maven + Java JDK 1.8 + easyexcel 2.1.1,新建一个 maven 应用,然后 pom.xml 文件导入 EasyExcel的依赖,如下图所示

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

二、将数据写入Excel

1.创建excel对应的实体对象

接下来我们需要创建excel对应的实体对象类,实际上就是Excel数据表中的表头属性,贴代码如图所示。

import com.alibaba.excel.annotation.ExcelProperty;

/**
 * @param
 * @author wcy
 * @create 2022/10/15
 * @return
 * @description
 **/
public class UserData {
    @ExcelProperty(value = "用户编号",index = 0)
    private int id;
    @ExcelProperty(value = "用户名",index = 1)
    private String username;
    @ExcelProperty(value = "性别",index = 2)
    private String gender;
    @ExcelProperty(value = "工资",index = 3)
    private Double salary;

    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "UserData{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", gender='" + gender + '\'' +
                ", salary=" + salary +
                '}';
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }
}

2.write方法实现写操作

在具体的写操作方法中,write方法需要传入两个参数:

  • String pathName:excel文件路径和文件名称。

  • Class head:excel表头对应的实体类。

import com.alibaba.excel.EasyExcel;

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

/**
 * @param
 * @author wcy
 * @create 2022/10/15
 * @return
 * @description
 **/
public class EasyExcelTest {
    public static void main(String[] args) {
      //向list集合添加5条数据
        List<UserData> list = new ArrayList<>();
        for (int i=0;i <5; i++){
            UserData data = new UserData();
            data.setId(i);
            data.setUsername("xiaohong" + i + "号");
            data.setGender("男");
            data.setSalary(1000.00);
            list.add(data);
        }
        // 设置excel文件路径和文件名称
        String fileName = "/Users/kobe/Desktop/01.xlsx";
        // write方法实现写操作
        EasyExcel.write(fileName,UserData.class).sheet("用户信息").doWrite(list);
    }
}

3.测试结果分析

然后我们把项目运行后,成功将5条数据写入Excel表格:
在这里插入图片描述

三、将数据读出Excel

1.配置监听器

需要继承AnalysisEventListener监听器重载的三个方法:

1 invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context):读取表头内容。
2.invoke(UserData userData, AnalysisContext analysisContext):从第二行开始读取依次读取每行内容,userData中存储了读取到的数据。
3.doAfterAllAnalysed(AnalysisContext analysisContext):读取之后执行的方法。

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

import java.util.Map;

/**
 * @param
 * @author wcy
 * @create 2022/10/15
 * @return
 * @description
 **/
public class ExcelListenterTest extends AnalysisEventListener <UserData>{

    // 读取第一行表头内容
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        System.out.println("表头信息" + headMap);
    }
    // 从第二行开始一行一行读取excel内容,每行内容读取到userData中
    @Override
    public void invoke(UserData userData, AnalysisContext analysisContext) {
        System.out.println(userData);
    }
    // 读取之后执行
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取结束!");
    }
}

2.read方法实现写操作

在具体的写操作方法中,read方法传入三个参数:

  • String pathName:excel文件路径和文件名称。

  • Class head:excel表头对应的实体类。

  • ReadListener readListener:监听器。

import com.alibaba.excel.EasyExcel;

/**
 * @param
 * @author wcy
 * @create 2022/10/15
 * @return
 * @description
 **/
public class EasyExcelRead {
    public static void main(String[] args) {
        // 要读取文件的路径
         String fileName = "/Users/kobe/Desktop/01.xlsx";
        // 调用read方法实现读取操作
        EasyExcel.read(fileName,UserData.class,new ExcelListenterTest()).sheet("用户信息").doRead();
    }
}

3.测试结果分析

我们来运行下项目,已经看到控制台成功读取出Excel里的5条数据,有没有发现既简单又好用,你学废了么!
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐