EasyExcel系列:读取空数据行的问题

定义Excel模板时,会生产空行问问题,可以自定义监听器过滤空行。以PageReadListener为例。

java 复制代码
/**
 * 自定义读取监听器,解决无法空行问题
 *
 */
@Slf4j
public class MyPageReadListener<T> extends PageReadListener<T> {
 
 
    @Override
    public void invoke(T data, AnalysisContext context) {
        // 如果一行Excel数据均为空值,则不装载该行数据
        if (isLineNullValue(data)) {
            return;
        }
        ...
    }
 
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        ...
    }
 
    /**
     * 判断整行单元格数据是否均为空
     */
    private boolean isLineNullValue(T data) {
        if (data instanceof String) {
            return Objects.isNull(data);
        }
        try {
            List<Field> fields = Arrays.stream(data.getClass().getDeclaredFields())
                    .filter(f -> f.isAnnotationPresent(ExcelProperty.class))
                    .collect(Collectors.toList());
            List<Boolean> lineNullList = new ArrayList<>(fields.size());
            for (Field field : fields) {
                field.setAccessible(true);
                Object value = field.get(data);
                if (Objects.isNull(value)) {
                    lineNullList.add(Boolean.TRUE);
                } else {
                    lineNullList.add(Boolean.FALSE);
                }
            }
            return lineNullList.stream().allMatch(Boolean.TRUE::equals);
        } catch (Exception e) {
            log.error("读取数据行[{}]解析失败: {}", data, e.getMessage());
        }
        return true;
    }
 
}
相关推荐
yujkss16 小时前
23种设计模式之【状态机模式】-核心原理与 Java实践
java·ui·设计模式
无名指的等待71217 小时前
Redisson的Lock和TryLock的区别
java·开发语言·数据库
new_daimond17 小时前
Apache Shiro 技术详解
java·apache
yuriy.wang17 小时前
Spring IOC源码篇六 核心方法obtainFreshBeanFactory.parseCustomElement
java·后端·spring
.鸣17 小时前
idea学习日记10: 字符串相关类的底层原理
java·学习
在未来等你17 小时前
Kafka面试精讲 Day 24:Spring Kafka开发实战
java·spring boot·面试·kafka·消息队列·spring kafka·@kafkalistener
龙茶清欢18 小时前
1、Lombok入门与环境配置:理解Lombok作用、配置IDE与构建工具
java·spring boot·spring cloud
龙茶清欢18 小时前
2、Nginx 与 Spring Cloud Gateway 详细对比:定位、场景与分工
java·运维·spring boot·nginx·spring cloud·gateway
Eoch7718 小时前
HashMap夺命十连问,你能撑到第几轮?
java·后端
云动雨颤18 小时前
程序出错瞎找?教你写“会说话”的错误日志,秒定位原因
java·运维·php