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;
    }
 
}
相关推荐
快乐肚皮9 分钟前
MySQL集群模式详解:架构、优缺点与生产环境选型指南
java·mysql
季鸢25 分钟前
Java设计模式之备忘录模式详解
java·设计模式·备忘录模式
异常君26 分钟前
Java 逃逸分析:让你的代码性能飙升的秘密
java·面试·代码规范
迢迢星万里灬27 分钟前
Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
java·spring boot·spring·面试·mybatis·spring mvc
天天摸鱼的java工程师28 分钟前
Nacos 2.0 + 为啥非要三个端口?一次踩坑实录
java·后端
SimonKing29 分钟前
5分钟了解,Mysql事务隔离级别
java·后端·架构
代码老y32 分钟前
基于springboot的图书管理系统的设计与实现
java·vue.js·spring boot·后端·毕业设计·课程设计·个人开发
写bug写bug42 分钟前
彻底搞懂响应式编程
java·后端·spring
残*影1 小时前
什么是MVC?
java·spring·mvc
AI迅剑1 小时前
模块二:C++核心能力进阶(5篇)篇二:《多线程编程:C++线程池与原子操作实战》(14万字深度指南)
java·开发语言·c++