简介
EasyExcel是阿里出品的一个解析Excel的工具,具有使用简单、节省内存的特点。
EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理。
使用方式
1、创建一个普通的maven项目
2、pom中引入xml相关依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<!--easyexcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
</dependencies>
查看pom文件的依赖结构,发现easyexcel依赖于Apache poi,
3、创建实体类
- 设置表头和添加的数据字段(表头即Excel表格的列名)
@Data
public class Data4Excel {
// 设置excel的表头名称
@ExcelProperty("学生编号")
private int stuNo;
// 设置excel的表头名称
@ExcelProperty("学生姓名")
private String stuName;
}
4 、实现写操作
- 创建一个测试类
public class Write {
/**
* 最简单的写法
*/
public static void main(String[] args) throws Exception{
String fileName = "C:\\Users\\KenX\\Desktop\\easyexcel.xlsx";
// 这里需要指定:文件名、写用哪个class、然后写到第一个sheet、写的数据
// 然后文件流会自动关闭
EasyExcel.write(fileName,Data4Excel.class).sheet("写入方法一").doWrite(data());
}
// 模拟数据,封装到list集合中,用于后续写到Excel文件
private static List<Data4Excel> data() {
ArrayList<Data4Excel> data4Excels = new ArrayList<>();
for (int i = 1; i < 11; i++) {
Data4Excel data = new Data4Excel();
data.setStuNo(i);
data.setStuName("学生-"+i);
data4Excels.add(data);
}
return data4Excels;
}
}
- 查看文件,已经写入成功
5、实现读操作
- 01、因为列固定,行不固定,所以要修改实体类属性
@Data
public class Data4Excel {
// 设置excel的表头名称
@ExcelProperty(value = "学生编号",index = 0)
private int stuNo;
// 设置excel的表头名称
@ExcelProperty(value = "学生姓名",index = 1)
private String stuName;
}
- 02、创建读取操作的监听器
//创建读取excel监听器
public class ExcelListener extends AnalysisEventListener<Data4Excel> {
//创建list集合封装最终的数据
List<Data4Excel> list = new ArrayList<>();
//一行一行去读取excle内容
@Override
public void invoke(Data4Excel data4Excel, AnalysisContext analysisContext) {
System.out.println("***"+data4Excel);
list.add(data4Excel);
}
//读取excel表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("*****表头信息:"+headMap);
}
//读取完成后执行的操作
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
- 03、最终读取操作
public class Read {
public static void main(String[] args) {
/**
* 最简单的写法
*/
String fileName = "C:\\Users\\KenX\\Desktop\\easyexcel.xlsx";
// 这里需要指定:文件名、读用哪个class、然后读取第一个sheet
// 文件流会自动关闭
EasyExcel.read(fileName, Data4Excel.class, new ExcelListener()).sheet().doRead();
}
}