EasyExcel集成使用总结与完整示例
一、EasyExcel简介
EasyExcel是阿里巴巴开源的Java库,专注于简化Excel文件的读写操作。它基于Apache POI进行了优化,采用流式处理,具有低内存占用和高性能的特点,非常适合处理大规模数据的导入导出。
主要特点
- 简单易用:提供简洁的API和注解,快速上手。
- 高性能:内存占用低,支持读写大型Excel文件。
- 功能丰富:支持数据导入导出、样式设置、数据转换、模板填充等。
- 扩展性强:支持自定义监听器、转换器,满足复杂业务需求。
二、集成步骤
1. 引入依赖
在pom.xml
中添加EasyExcel依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version> <!-- 使用最新稳定版本 -->
</dependency>
2. 定义实体类
创建与Excel列对应的实体类,使用@ExcelProperty
注解指定列名。
import com.alibaba.excel.annotation.ExcelProperty;
public class User {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("邮箱")
private String email;
// 省略构造方法、Getter和Setter
}
三、数据导出实现
1. 准备数据
创建要导出的数据列表。
import java.util.ArrayList;
import java.util.List;
public class ExportData {
public static List<User> prepareData() {
List<User> users = new ArrayList<>();
users.add(new User("张三", 25, "zhangsan@example.com"));
users.add(new User("李四", 30, "lisi@example.com"));
// 添加更多数据...
return users;
}
}
2. 导出Excel
使用EasyExcel.write()
方法将数据写入Excel文件。
import com.alibaba.excel.EasyExcel;
public class ExcelExportExample {
public static void main(String[] args) {
String fileName = "users.xlsx";
List<User> data = ExportData.prepareData();
EasyExcel.write(fileName, User.class)
.sheet("用户信息")
.doWrite(data);
System.out.println("数据导出成功!");
}
}
四、数据导入实现
1. 创建监听器
继承AnalysisEventListener
,处理读取到的数据。
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
public class UserImportListener extends AnalysisEventListener<User> {
private List<User> users = new ArrayList<>();
@Override
public void invoke(User user, AnalysisContext context) {
users.add(user);
System.out.println("读取到数据:" + JSON.toJSONString(user));
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
System.out.println("所有数据导入完成,共 " + users.size() + " 条记录。");
// 在这里可以对读取到的数据进行处理,如保存到数据库
}
}
2. 导入Excel
使用EasyExcel.read()
方法读取Excel文件。
import com.alibaba.excel.EasyExcel;
public class ExcelImportExample {
public static void main(String[] args) {
String fileName = "users.xlsx";
EasyExcel.read(fileName, User.class, new UserImportListener())
.sheet()
.doRead();
System.out.println("数据导入完成!");
}
}
五、高级功能
1. 自定义样式
通过WriteCellStyle
和HorizontalCellStyleStrategy
设置单元格样式。
2. 数据转换
实现Converter
接口,自定义数据类型转换。
3. 多Sheet操作
导出多个工作表:
EasyExcel.write(fileName)
.sheet("用户信息", User.class).doWrite(userData)
.sheet("订单信息", Order.class).doWrite(orderData);
导入多个工作表:
EasyExcel.read(fileName)
.sheet("用户信息", User.class, userListener)
.sheet("订单信息", Order.class, orderListener)
.doRead();
4. 模板填充
使用模板文件填充数据:
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("username", "张三");
dataMap.put("date", new Date());
EasyExcel.fill(fileName, dataMap, Sheet.class).write().doWrite();
六、注意事项
- 版本兼容性:确保EasyExcel版本与项目依赖兼容。
- 内存管理:处理大数据量时,合理设置监听器的批量处理大小,避免内存溢出。
- 异常处理:在监听器中捕获并处理异常,确保程序稳定运行。
通过以上总结和示例,您可以快速掌握EasyExcel的集成和使用方法,实现高效的Excel数据导入导出。