EasyExcel 读取不到数据

在使用EasyExcel进行Excel数据导入时遇到监听器无响应的难题,经过一系列排查,发现IDEA默认生成的ReadListener接口实现中,hasNext方法返回了false,导致解析停止。因此,解决办法是避免实现这个方法或者确保hasNext返回正确值,以使监听器正常工作。
摘要由CSDN通过智能技术生成

接到个需求要做Excel的数据导入,很自然的想到了用EasyExcel 来做,参照官方写法,很快就写完·代码了。搞定前端文件上传后,开始前后端联调测试。奇怪的问题发生了。。监听器一点反应都没有,咋回事???一通百度,看官网issue 都没解决。没办法了,自己开始各种尝试。

最终发现是因为是实现的 ReadListener 接口的时候,IDEA默认会把接口中的方法全部覆写如下图:

 

关键来了!!! hasNext 自动给return false !!! 这将导致不进行下一步的解析。所以监听器才会一点反应都没有。。。。 实现ReadListener的时候特别注意下 hasNext 方法就别实现了。

EasyExcel提供了灵活的方式来读取不确定性标头的Excel文件。以下是一个示例代码,演示了如何使用EasyExcel读取不确定性标头的Excel文件: ```java // 导入所需的类 import com.alibaba.excel.EasyExcel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.CellExtra; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.read.metadata.holder.ReadRowHolder; import com.alibaba.excel.read.metadata.holder.ReadSheetHolder; import com.alibaba.excel.read.metadata.holder.ReadWorkbookHolder; import com.alibaba.excel.read.metadata.property.ExcelReadHeadProperty; import com.alibaba.excel.read.metadata.property.ExcelReadSheetProperty; import com.alibaba.excel.read.metadata.property.ExcelReadWorkbookProperty; import com.alibaba.excel.support.ExcelTypeEnum; import java.util.ArrayList; import java.util.List; import java.util.Map; // 创建一个自定义的监听器类,用于处理读取到的数据 class CustomReadListener extends AnalysisEventListener<Map<Integer, CellData>> { private List<Map<Integer, CellData>> dataList = new ArrayList<>(); @Override public void invoke(Map<Integer, CellData> rowData, AnalysisContext context) { dataList.add(rowData); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 数据读取完成后的处理逻辑 // 可以在这里对读取到的数据进行进一步处理或存储 } public List<Map<Integer, CellData>> getDataList() { return dataList; } } // 创建一个方法,用于读取Excel文件 public void readExcel(String filePath) { // 创建ExcelReaderBuilder对象 ExcelReaderBuilder readerBuilder = EasyExcel.read(filePath, new CustomReadListener()); // 设置读取的Sheet ReadSheet readSheet = EasyExcel.readSheet(0).build(); readerBuilder.read(readSheet); // 执行读取操作 readerBuilder.doReadAll(); } // 调用readExcel方法,传入Excel文件路径 readExcel("path/to/your/excel/file.xlsx"); ``` 在上述代码中,我们创建了一个自定义的监听器类`CustomReadListener`,用于处理读取到的数据。在`invoke`方法中,我们将读取到的每一行数据存储到`dataList`中。在`doAfterAllAnalysed`方法中,我们可以对读取到的数据进行进一步处理或存储。 然后,我们创建了一个`ExcelReaderBuilder`对象,并通过`EasyExcel.read`方法指定要读取的Excel文件和监听器。接下来,我们通过`EasyExcel.readSheet`方法设置要读取的Sheet,并通过`readerBuilder.read`方法将其添加到读取器中。 最后,我们调用`readerBuilder.doReadAll`方法执行读取操作。 请注意,上述代码中的`filePath`需要替换为实际的Excel文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值