EasyExcel导入数据全为空问题

检查:
BeanExcel.java 导入的实体类,不能有@Accessors(chain = true)注解
@Accessors(chain = true)注解,会让读取的数据行始终为空。
记住,不能加!
要禁止使用链式调用的方式@Accessors(chain = false)

### 如何使用 EasyExcel 进行数据导入 #### 易于理解的概述 EasyExcel 是阿里巴巴开源的一个轻量级 Java 库,用于高效处理 Excel 数据。它提供了简洁易用的 API 来简化 Excel 文件的操作过程。对于数据导入功能,可以通过 `EasyExcel.read` 方法结合自定义监听器来逐行读取并处理 Excel 表格中的数据。 以下是详细的配置教程以及示例代码: --- #### Maven 依赖引入 为了使用 EasyExcel,首先需要在项目的 `pom.xml` 文件中添加以下依赖项: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> <!-- 版本号可能有所不同,请根据实际需求调整 --> </dependency> ``` --- #### 示例代码:数据导入 假设有一个名为 `traffic_accident_early_warning.xlsx` 的 Excel 文件,其中存储了一些交通预警数据。我们希望将其导入程序中,并对每一条记录进行处理。 ##### 主类代码 ```java import com.alibaba.excel.EasyExcel; import java.util.List; public class ImportExample { public static void main(String[] args) { // 定义要读取的文件路径 String fileName = "traffic_accident_early_warning.xlsx"; // 调用 EasyExcel 提供的 read 方法 EasyExcel.read(fileName, TrafficAccidentEarlyWarningVO.class, new TrafficAccidentDataListener()) .sheet() // 默认读取第一个工作表 .doRead(); } } ``` ##### VO 类(实体映射) 创建一个与 Excel 列对应的实体类 `TrafficAccidentEarlyWarningVO.java`,该类需标注字段名以便自动匹配列头。 ```java import lombok.Data; @Data public class TrafficAccidentEarlyWarningVO { private String accidentType; // 事故类型 private Integer severityLevel; // 危险等级 private String location; // 地点描述 private Long timestamp; // 时间戳 } ``` ##### 自定义监听器 通过继承 `AnalysisEventListener<T>` 实现自定义逻辑,每次读取一行数据都会触发 `invoke` 方法。 ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; public class TrafficAccidentDataListener extends AnalysisEventListener<TrafficAccidentEarlyWarningVO> { @Override public void invoke(TrafficAccidentEarlyWarningVO data, AnalysisContext context) { // 对每一行的数据进行处理 System.out.println("读取到一行数据:" + data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 当所有数据都解析完成后执行此方法 System.out.println("所有数据已成功解析!"); } } ``` --- #### 关键点解释 1. **核心方法调用** 使用 `EasyExcel.read()` 方法指定目标文件、数据模型类和监听器实例。随后通过 `.sheet().doRead()` 开始读取操作[^3]。 2. **性能优化** 如果 Excel 文件较大,建议采用分页方式逐步加载数据,而非一次性部载入内存。这可通过设置监听器内的缓冲机制实现。 3. **异常捕获** 在生产环境中应增加错误捕捉逻辑,确保即使部分数据问题也不会中断整个流程。 --- #### 注意事项 - 确保 Excel 文件的第一行为合法的列标题,这些标题名称应当严格对应 VO 类属性命名规则。 - 若存在复杂场景(如嵌套对象),则需要额外配置转换策略或扩展支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值