alibaba-EasyExcel的使用说明
目录
alibaba EasyExcel的使用说明
核心方法的执行顺序和规则
1. invokeHead
(可选)
• 触发条件 :解析到 Excel 的 表头行 (第一行)。
• 用途 :获取表头数据(例如动态列名)。
• 示例 :
override fun invokeHead(headMap: Map<Int, String>, context: AnalysisContext) {
println("表头数据: $headMap")
}
2. invoke
• 触发条件 :每解析成功一行数据后触发。
• 用途 :处理单行数据(例如保存到数据库)。
• 注意 :此方法必须实现。
• 示例 :
override fun invoke(user: User, context:AnalysisContext) {
println("处理数据: $user")
}
3. doAfterAllAnalysed
• 触发条件 :整个 Sheet 解析完成 后触发。
• 用途 :收尾操作(例如关闭资源、提交事务)。
• 注意 :此方法在 EasyExcel 3.3+ 中默认空实现,需手动覆盖。
• 示例 :
override fun doAfterAllAnalysed(context:AnalysisContext) {
println("所有数据解析完成")
}
4. onException
• 触发条件 :解析过程中 发生异常 时触发(例如数据类型不匹配)。
• 用途 :自定义异常处理逻辑(例如记录错误日志)。
• 注意 :如果不覆盖此方法,默认会抛出异常并终止解析。
• 示例 :
override fun onException(exception: Exception, context:AnalysisContext) {
println("解析异常: ${exception.message}")
throw exception // 可选择终止或忽略
}
完整的执行流程图
以下是解析一个 3 行数据 (含表头)的 Excel 时的典型流程:
EasyExcel.read(inputStream, User::class.java, listener)
.sheet()
.doRead()
流程步骤:
invokeHead
→ 解析表头(如果覆盖了该方法)。invoke
→ 解析第一行数据。invoke
→ 解析第二行数据。invoke
→ 解析第三行数据。doAfterAllAnalysed
→ 整个 Sheet 解析完成。onException
→ 如果中间某行解析失败,会直接跳转到这里。
高级场景:异常处理逻辑
如果某行数据解析失败(例如字段类型不匹配):
onException
被触发,处理异常。doAfterAllAnalysed
仍然会被调用(即使中途出错)。- 后续行解析终止
(默认行为,可通过
context.interrupt()
显式控制)。
Kotlin 代码实战示例
监听器完整实现
class UserDataListener : ReadListener<User> {
override fun invokeHead(headMap: Map<Int, String>, context: AnalysisContext) {
println("表头: ${headMap.values}")
}
override fun invoke(user: User, context: AnalysisContext) {
println("处理数据: $user")
// 业务逻辑:保存到数据库等
}
override fun doAfterAllAnalysed(context: AnalysisContext) {
println("解析完成,释放资源")
}
override fun onException(exception: Exception, context: AnalysisContext) {
println("第 ${context.readRowHolder().rowIndex} 行解析失败: ${exception.message}")
// 继续解析后续行(不抛出异常)
// context.interrupt() // 强制终止解析
}
}
控制解析行为
•
终止解析
:在
onException
中调用
context.interrupt()
。
•
忽略错误继续解析
:在
onException
中不抛出异常。
性能优化建议
- 批量处理
:在
invoke
中不要逐条操作数据库,改为批量提交。 - 内存控制
:通过
ReadCache
管理缓存数据(默认 100 条)。 - 异步处理
:在
invoke
中将数据发送到队列,由后台线程处理。
通过以上规则,你可以精准控制 Excel 解析的生命周期,确保数据处理的可靠性和高性能。