EasyExcel 读取文件模板校验(限于单无单元格合并类型)

阐述:

  • 首先定义EasyExcel 导入文件时所要转的文件实体类,主要该文件实体类要加上**@ExcelProperty**注解,目的相当于读入的excel的表头模板,注意该注解value值要和文件模板表头保持一致,不然的话,模板校验会一直不通过。模板校验表头通用代码如下:
@Component
public  class  CheckTemplateListener<T> extends AnalysisEventListener<T> {private static Class<?> tClass = null;public CheckTemplateListener() {}public CheckTemplateListener(Class<?> tClass) {this.tClass = tClass;}@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {/*count 记录模板表头有几个,用以判断用户导入的表格是否和模板完全一致如果用户导入表格较模板的表头多,但其余符合模板,这样不影响则不需要*/int count = 0;// 获取数据实体的字段列表Field[] fields = tClass.getDeclaredFields();// 遍历字段进行判断for (Field field : fields) {// 获取当前字段上的ExcelProperty注解信息ExcelProperty fieldAnnotation = field.getAnnotation(ExcelProperty.class);// 判断当前字段上是否存在ExcelProperty注解if (fieldAnnotation != null) {++count;// 存在ExcelProperty注解则根据注解的index索引到表头中获取对应的表头名String headName = headMap.get(fieldAnnotation.index());// 判断表头是否为空或是否和当前字段设置的表头名不相同if (StringUtils.isEmpty(headName) || !headName.equals(fieldAnnotation.value()[0])) {// 如果为空或不相同,则抛出异常不再往下执行throw new BusinessException("模板错误,请检查导入模板");}}}// 判断用户导入表格的标题头是否完全符合模板if (count != headMap.size()) {throw new BusinessException("模板错误,请检查导入模板");}}@Overridepublic void invoke(T t, AnalysisContext analysisContext) {}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}

实例操作:

  • 读入excel的模板暨所转实体类:
/*** @Author: lgChen* @createTime: 2022-06-24 09:56:52*/@Data@ApiModel("绿色研究业务导入(校验模板)")@ExcelIgnoreUnannotated //忽视无注解的属性@ContentRowHeight(20) //文本高度@HeadRowHeight(20) //标题高度public class GreenResearchImport implements Serializable {private static final long serialVersionUID = -3036878997881054086L;@ExcelProperty(value = "*填报月份(yyyy-mm)",index = 0)@ApiModelProperty(value = "填报月份")private String fillingMonth;@ExcelProperty(value = "*主办单位",index = 1)@ApiModelProperty(value = "主办单位")private String sponsorUnit;@ExcelProperty(value = "协办单位",index = 2)@ApiModelProperty(value = "协办单位")private String coUnit;@ExcelProperty(value = "*考核指标",index = 3)@ApiModelProperty(value = "考核指标")private String indicators;@ExcelProperty(value = "*业务名称",index = 4)@ApiModelProperty(value = "业务名称")private String businessName;@ExcelProperty(value = "*业务类别",index = 5)@ApiModelProperty(value = "业务类别描述")private String businessCategoryValue;@ExcelProperty(value = "*研发类别",index = 6)@ApiModelProperty(value = "研发类别描述")private String researchCategoryValue;@ExcelProperty(value = "*完成时间(yyyy-mm-dd)",index = 7)@ApiModelProperty(value = "完成日期")private String completionDate;@ExcelProperty(value = "业务具体说明",index = 8)@ApiModelProperty(value = "业务具体说明")private String businessDetail;}
  • 读及校验模板操作
List<GreenResearchImport> objects = EasyExcel.read(file.getInputStream(),GreenResearchImport.class,new CheckTemplateListener(GreenResearchImport.class)).head(GreenResearchImport.class).sheet().headRowNumber(1).doReadSync();

ps:这里把读excal转实体类和模板校验放在了一起,也可以先校验模板然后在读excel转实体,不过会产生两次读操作。

  • 校验模板操作
    /*** 校验导入模板*/public void checkTemplate(MultipartFile file,Class<?> tClass) {try {EasyExcel.read(file.getInputStream(),tClass,new CheckTemplateListener(tClass)).sheet().doRead();} catch (IOException e) {log.info("模板校验异常,msg = {}",e.getMessage(),e);throw new BusinessException("导入模板校验异常!");}}
  • excel转目标实体类操作
List<GreenResearchImport> objects = EasyExcel.read(file.getInputStream(),GreenResearchImport.class).head(GreenResearchImport.class).sheet().headRowNumber(1).doReadSync();
  • Ps:

    • 时间模板类型校验正则表达式
    //yyyy-MM-dd
    private final static Pattern DATE_YMD = Pattern.compile("([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))");
    //yyyy-MM
    private final static Pattern DATE_YM = Pattern.compile("([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[1-9]|1[02])))");
    

EasyExcel读excel文件模板校验暨时间格式正则表达式相关推荐

  1. easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出

    前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...

  2. EasyExcel实现Excel文件导入导出

    1 EasyExcel简介 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://git ...

  3. java使用easyExcel生成excel文件直接写入邮件附件并发送

    目录 一:引入pom依赖 二:完整代码如下(真实可用) 本文章主要是讲述如何使用EasyExcel生成excel文件,并将文件写入到邮件附件中进行邮件发送. 一:引入pom依赖 <!-- 邮件 ...

  4. Alibaba开源工具EasyExcel读写Excel文件

    前言 工作中使用 excel 表格处理数据是很常见的操作,经常会使用 excel 文件来导入数据或者导出数据,是不是脑海中已经思考有哪些处理excel框架? 小编之前呢就知道Java 解析.生成 Ex ...

  5. 阿里EasyExcel读写excel文件的基本使用

    EasyExcel读写excel文件 1.EasyExcel简介 2.对excel的写操作 1.1 创建一个普通的maven项目并引入相关依赖 1.2 创建实体类 1.3 实现写操作 1.3.1 创建 ...

  6. 读excel文件至DataTable

    今天是我注册博客园的日子,不知道写什么才好.就写下工作中遇到的事情. 在.net中读excel文件的代码网上是多之又多,当初在网上搜索了一段,用的是OLEDB方法,我也不例外,但客户多次向我公司反映, ...

  7. python 读plt文件_用python读Excel文件

    在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...

  8. .bin 文件用excel文件打开_用python读Excel文件

    在IC设计.验证.后端中经常会用Excel来做配置文件.寄存器表.定义后端SDC参数等,不管Excel好不好用,但学习成本低啊. Excel文件的结构 Excel文件主要由工作簿(book).工作表( ...

  9. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

最新文章

  1. GridView标题行换行之我见 (转)
  2. 第三周项目四-穷举法解决组合问题
  3. 局部变量java6_java字节码-几种字符串局部变量用法的区别
  4. SQL Server 2005中创建CLR存储过程
  5. 利用iptables来配置linux禁止所有端口登陆和开放指定端口
  6. myeclipse配置weblogicserver
  7. request域对象和请求转发
  8. php考试倒计时提交系统,AJAX_基于Ajax技术实现考试倒计时并自动提交试卷,1.概述在开发网络考试系统 - phpStudy...
  9. 操作系统(二): 进程与线程
  10. table表格高级用法(二)
  11. flask route
  12. (转)B-树、B+树、B*树
  13. 美赛整理之Matlab读取全球海洋温度数据并显示干货
  14. sdram 时钟相位_SDRAM小结 — Windows Live
  15. python多窗口传递信息,认识QT ----- 多窗口以及窗口之间的传值
  16. android局域网调试无法安装,真机调试出现:INSTALL_FAILED_USER_RESTRICTED 安装错误解决方案...
  17. 单片机实验三 独立按键控制LED实验
  18. 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
  19. 计算机专业必读哪些经典书籍?
  20. 当前服务器系统内核版本是多少,linux下如何查看系统和内核版本

热门文章

  1. 所有iOS设备的屏幕分辨率
  2. java计算机毕业设计高校心理测评管理系统源码+mysql数据库+系统+lw文档+部署
  3. 如何实现多列对比去重
  4. 001,Python微信接龙脚本与腾讯会议定时挂网课脚本
  5. qcow2文件的snapshot管理
  6. excel柱形图/条形图怎能给正负值填充不同的颜色
  7. Kettle计算器常用函数
  8. 如何从YouTube历史记录中暂停,清除和删除视频
  9. 算法学习----红黑树
  10. 图片显示的优化以及blit