EasyExcel读取Excel空数据行问题
- 原因
- 解决
- 写在最后
原因
项目Excel导入使用的EasyExcel工具,为什么会出现空白行的问题呢;在进行Excel导入时都会提前设定一个Excel模版,Excel导入时在Excel模版中设置了单元的样式,但没有给单元格设值。在读取数据时没有判断这一步,所以会出现直接读取到整行数据均为null的情况;
解决
自定义监听器
/** 模版读取*/
@Slf4j
public class DemoReadListener<T> extends AnalysisEventListener<T> {/** 每一条数据解析都会来调用*/@Overridepublic void invoke(T data, AnalysisContext context) {//设置忽略空白行参数,ignoreEmptyRow默认true-忽略空的行,//此处设置为false,不忽略,然后根据读取到数据做校验analysisContext.readworkbookHolder().setIgnoreEmptyRow(false);if (CellDatalypeEnum.EMPTY.name().equals(analysisContext.readSheetHolder().getTempCellData().getType().name())){return;} else {//数据处理,数据值是否为空,也可以放在此处校验}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {//所有数据解析完成了调用}}
重启项目,导入原来有问题的Excel表格吧,数据读取是没问题的,也不会有空白行的问题了,如果是要校验一条数据字段是否为空,也是放在invoke中做校验的;
写在最后
可以在实体中绑定Excel模版定义的表头,如果发现导入某些字段为空,也可能是这个问题导致的;
//value值与Excel导入模版中定义保持一致
@ExcelProperty("名称")
private String name;