最近做excel导入功能时,测试人员导入的数据开头几行是空格,需要导入特定的第a-b行数据。结果发现开头的几个空白行老是被过滤掉了。导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
1,自定义监听器类继承AnalysisEventListener,重写invoke方法,context.readWorkbookHolder().setIgnooreEmptyRow(false). 这样子修改后,excel开头的空行还是被过滤掉了,中间和末尾的空行倒是没有再被过滤掉了
2,跟踪ExcelReader.reade(readSheet)方法,
到ExcelAnalyserIpl.analysis(List<ReadSheetList> readSheetList, Boolean readAll)的excelReadExecutor.execute()
到CsvExcelReadExecutor.execute()的excelReadExecutor.execute()的dealRecord(record, rowIndex++), 再到csvReadContext.analysisEventProcessor().endRow(csvReadContext)

当开头几行是空白时,执行到此处判断,是否忽略空白行默认是true, 因此直接return了,当执行到非空白行时才往下执行,然后回调重写后的invoke()方法, 重新设置是否忽略空白行值为false.
没办法,我最后只好在invoke()方法获取当前物理行数context.readRowHolder().getRowIndex()进行判断:是否是第一次回调该方法,且当前物理行数大于0. 如果是就新增几个空对象补充上去,如果不是就改第一次回调该方法参数为false.
在使用EasyExcel3.2.1版本处理Excel导入功能时,遇到开头空行被自动过滤的问题。尝试通过自定义监听器并设置忽略空行选项无效。深入源码发现,当读取到开头的空行时,系统默认会忽略。为解决此问题,采取的策略是在监听器的invoke方法中检测首次调用并补充空对象,以确保数据完整性。
1536





