首页 > 其他分享 >easyexcel填坑-校验表头为空,或者不符合预期

easyexcel填坑-校验表头为空,或者不符合预期

时间:2023-03-10 17:47:04浏览次数:37  
标签:map headMap easyexcel 表头 填坑 new expectHeadList

背景:

easyexcel v3.1.5

实体类已经使用注解 @ExcelProperty标注需要导入的属性

正文开始

关闭忽略空行,防止第一行是空跳过校验 ignoreEmptyRow(false)。此处如果未关闭,第一行为空时,不会进入invokeHeadMap方法

EasyExcel.read(file.getInputStream(), **.class,
                    new KnowledgeListener(kgService, classificationRepository, issuesRepository, syncNeo4j, algorithmService))
                    .ignoreEmptyRow(false).sheet().doRead();

在自己的 Listener 重写 invokeHeadMap 方法。headMap为excel的第一行数据映射,expectHeadList为easyExcel从headMap中匹配到的 @ExcelProperty标注过的字段。所有只需要判断数量是否一致即可,另外还要注意空行时的headMap为空。

 @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        if(CollectionUtils.isEmpty(headMap)){
            //throw new CactusException(500, "此处可以根据自己的业务处理");
        }
        //获取bo对象head名称
        List<String> expectHeadList = Optional.ofNullable(context)
                .map(AnalysisContext::currentReadHolder)
                .map(ReadHolder::excelReadHeadProperty)
                .map(ExcelReadHeadProperty::getHeadMap)
                .map(Map::values)
                .orElse(Collections.emptyList())
                .stream().map(Head::getHeadNameList)
                .flatMap(Collection::stream)
                .collect(Collectors.toList());
        if(CollectionUtils.isEmpty(expectHeadList)){
            //throw new CactusException(500, "此处可以根据自己的业务处理");
        }
        //表头数量检测
        if (!Objects.equals(headMap.size(), expectHeadList.size())) {
            //throw new CactusException(500, "此处可以根据自己的业务处理");
        }
    }

 

标签:map,headMap,easyexcel,表头,填坑,new,expectHeadList
From: https://www.cnblogs.com/ztfcb/p/17204229.html

相关文章

  • Easyexcel导出多个表格
    Easyexcel导出多个表格ExcelWriterexcelWriter=null;try{excelWriter=EasyExcel.write(response.getOutputStream()).build();......
  • Groovy 使用EasyExcel操作Excel
    示例一:读取Excel,打印拼接的Sqlimportcom.alibaba.excel.EasyExcelclassObj{Integernum;Stringname;}defreaderBuilder=EasyExcel.read(newFile(......
  • Java操作Excel之EasyExcel、标题、背景色设置
    首先不管是学习或者是了解什么技术都要先去看下官方文档https://alibaba-easyexcel.github.io/index.html原文地址 https://www.cnblogs.com/zhangsan-plus/p/16503278.h......
  • springboot集成easyexcel(阿里)
    poi比较占用内存。easyexcel性能优化不少,值得一看。pom.xml中添加:<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</......
  • DataTable的行列转换及多表头HTML表格转Excel
    需要解决的问题:1、根据数据库中多个不同字段名称的以行形式表现的数据转为以列形式展现的数据;2、HTML多表头数据展示,做到数据“一个萝卜一个坑”,并求出多条数据的合计数据。......
  • missing name after . operator各种报错一大堆(填坑篇)
    问题描述:代码自测没问题了,打包时发现有49个报错:missingnameafter.operatormissing;missing}missing)syntaxerrorinvalidreturn总之......
  • python项目中的“填坑”记录
    基础Python是动态类型的语言,Python中任何事物皆对象,如变量、数据结构、函数、类、模块等等,在创建一个对象的时候就会占用内存,Python中对象和引用是分离。Python的内存管理......
  • DS-单链表:单链表头插法
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • DS-单链表:单链表头删法
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • kx-顺序表:顺序表头文件定义
    一、公共头文件#ifndef__MYHEAD_H__#define__MYHEAD_H__/*******************************************************************@file:myhead.h*@brief:公......