EasyExcel实战
一. 简介
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。
他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。
二.应用场景
- 数据导入:减轻录入的工作量
- 数据导出:统计信息归档
- 数据传输:异构系统之间数据传输
三.easyExcel实现导出
1.导入相关依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
2.创建实体
设置表头和添加的数据字段
/**
* @author gf
* @date 2022/6/30
*/
@Data
@AllArgsConstructor
public class Person {
@ExcelProperty(value = "编号", index = 0)
private String id;
@ExcelProperty(value = "姓名", index = 1)
private String name;
@ExcelProperty(value = "年龄", index = 2)
private Integer age;
}
3.实现写操作
方式一:
public class EasyExcelMain {
public static void main(String[] args) {
// 指定要写入的excel文件名,如果不存在则创建
String fileName = "D:\\user.xlsx";
List<Person > personList = new ArrayList<>();
personList .add( new Person ("1001211112000050001","王杰 ",18));
personList .add( new Person ("1001211112000050002","赵雷 ",19));
personList .add( new Person ("1001211112000050003","王培昊 ",27));
// 调用write,传入文件名和Excel应对的实体类,通知指定sheet名称
EasyExcel.write(fileName, Person .class).sheet("用户信息").doWrite(userList);
}
}
方式二:
public class EasyExcelMain {
public static void main(String[] args) {
// 指定要写入的excel文件名,如果不存在则创建
String fileName = "D:\\user.xlsx";
List<Person > userList = new ArrayList<>();
personList .add( new Person ("1001211112000050001","王杰 ",18));
personList .add( new Person ("1001211112000050002","黄家驹 ",19));
personList .add( new Person ("1001211112000050003","窦唯 ",18));
ExcelWriter excelWriter = EasyExcel.write(fileName, Person .class).build();
// 创建Sheet对象
WriteSheet writeSheet = EasyExcel.writerSheet("用户信息").build();
// 向Excel中写入数据
excelWriter.write(personList , writeSheet);
// 关闭流
excelWriter.finish();
}
}
4.导出效果
四.easyExcel实现导入
方式一:
public class EasyExcelMain {
public static void main(String[] args) {
// 指定要写入的excel文件名,如果不存在则创建
String fileName = "D:\\user.xlsx";
readFile(fileName);
}
public static void readFile(String fileName ){
// 创建ExcelReaderBuilder对象
ExcelReaderBuilder readerBuilder = EasyExcel.read();
// 获取文件对象
readerBuilder.file(fileName);
// 指定sheet
readerBuilder.sheet(0);
// 自动关闭输入流
readerBuilder.autoCloseStream(true);
// 设置Excel文件格式
readerBuilder.excelType(ExcelTypeEnum.XLSX);
readerBuilder.registerReadListener(new AnalysisEventListener() {
// 每解析一行数据,该方法会被调用一次
@Override
public void invoke(Object obj, AnalysisContext analysisContext) {
// 如果没有指定数据模板, 解析的数据会封装成 LinkedHashMap返回
// obj instanceof LinkedHashMap 返回 true
System.out.println("解析数据为 user:" + obj.toString());
//TODO 转换成personList 存入数据库中
}
// 全部解析完成被调用
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("解析完成...");
}
});
readerBuilder.doReadAll();
}
}
方式二:
public class EasyExcelMain {
public static void main(String[] args) {
// 指定要写入的excel文件名,如果不存在则创建
String fileName = "D:\\user.xlsx";
simpleRead(fileName);
}
public static void simpleRead(String fileName){
List<Person> peopleList= new ArrayList<>();
EasyExcel.read(fileName, Person.class, new AnalysisEventListener<Person>(){
@Override
public void invoke(Person person, AnalysisContext analysisContext) {
peopleList.add(person);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}).doReadAll();
//获取读取到的数据
for (Person p : peopleList) {
System.out.println("获取对象"+p);
}
}
}