企业门户网站方案,网站建设要考虑哪些方面,壹网,网页版微信是什么意思文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言
EasyExcel 是… 文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言
EasyExcel 是阿里巴巴开源的一款基于 Java 的 Excel 处理工具专注于高性能和低内存占用尤其适合处理百万级数据的大文件。相比传统的 Apache POIEasyExcel 通过流式读写和智能内存管理显著降低了内存溢出风险同时提供了简洁的 API 和灵活的注解配置。本文将从基础配置到实际应用场景详解 EasyExcel 的核心功能。 二、环境准备与基础配置
1、添加依赖
在 pom.xml 中引入 EasyExcel 依赖以最新稳定版为例
dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.2.0/version
/dependency2、定义实体类
通过注解 ExcelProperty 映射 Excel 列名或索引ExcelIgnore 忽略字段
Data
public class User {ExcelProperty(用户ID)private Long id;ExcelProperty(value 姓名, index 1) // 指定列索引private String name;ExcelProperty(创建时间)private Date createTime;ExcelIgnore // 不参与读写private String remark;
}三、Excel 读取详解
1、基础读取
使用 PageReadListener 实现分批处理默认每 100 条处理一次
String fileName user_data.xlsx;
EasyExcel.read(fileName, User.class, new PageReadListenerUser(dataList - {dataList.forEach(user - System.out.println(读取数据 user.getName()));
})).sheet().doRead();2、自定义监听器
实现 ReadListener 接口手动控制数据批次
Slf4j
public class UserListener implements ReadListenerUser {private static final int BATCH_SIZE 200;private ListUser cachedList new ArrayList(BATCH_SIZE);Overridepublic void invoke(User user, AnalysisContext context) {cachedList.add(user);if (cachedList.size() BATCH_SIZE) {saveToDatabase(cachedList); // 模拟入库操作cachedList.clear();}}Overridepublic void doAfterAllAnalysed(AnalysisContext context) {if (!cachedList.isEmpty()) saveToDatabase(cachedList);log.info(所有数据解析完成);}private void saveToDatabase(ListUser list) {// 实际业务中调用 DAO 层}
}调用方式
EasyExcel.read(fileName, User.class, new UserListener()).sheet().doRead();3、多 Sheet 处理
支持读取多个 Sheet每个 Sheet 可绑定不同监听器
try (ExcelReader excelReader EasyExcel.read(fileName).build()) {ReadSheet sheet1 EasyExcel.readSheet(0).head(User.class).registerReadListener(new UserListener()).build();ReadSheet sheet2 EasyExcel.readSheet(1).head(Order.class).registerReadListener(new OrderListener()).build();excelReader.read(sheet1, sheet2);
}四、Excel 写入详解
1、基础写入
直接写入数据列表自动生成表头
ListUser userList queryUsersFromDB(); // 从数据库查询数据
EasyExcel.write(export_users.xlsx, User.class).sheet(用户列表).doWrite(userList);2、动态列与复杂表头
通过 ExcelProperty 定义多级表头和列顺序
Data
public class SaleData {ExcelProperty({销售信息, 订单号})private String orderId;ExcelProperty({销售信息, 金额})private BigDecimal amount;ExcelProperty(value 时间, index 2) // 指定列顺序private Date createTime;
}3、样式与模板填充
支持基于模板的填充如财务报表
// 填充模板中的占位符如 {name}
MapString, Object data new HashMap();
data.put(name, 张三);
data.put(amount, 10000);EasyExcel.write(report.xlsx).withTemplate(template.xlsx).sheet().doFill(data);五、总结
EasyExcel 凭借其高性能和低内存占用成为处理大文件 Excel 的首选工具。通过灵活的注解配置和事件监听机制开发者可以轻松实现复杂的数据映射和分批处理逻辑。无论是数据导入导出还是模板化报表生成EasyExcel 均能高效完成。 版权声明本博客内容为原创转载请保留原文链接及作者信息。 参考文章
EasyExcel官方文档CSDNEasyExcel详解结合官方文档