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

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


所有评论(0)