@Transactional(rollbackFor = Exception.class)

@Overridepublic List save(List>> list, int ztId, int year, int month, booleanhasErr) {

logger.info("--start---导入判断----");

List error = new ArrayList<>();

List newZwmxz = new ArrayList<>();

String pattern= "^[-]?\\d+(\\.\\d+)?$";//遍历传过来的数据集合

for(var item : list) {//每一行

for(var row : item.entrySet()) {//获取行的索引

Integer rowIndex =row.getKey();//索引为0表示为表头

if (rowIndex == 0) {

String leftYear= row.getValue().get(1);

String rightYear= row.getValue().get(2);

logger.info("---leftYear={}--------rightYear={}----------", leftYear, rightYear);

String left= judgeYear(leftYear, year, "B");if (left != null) {

error.add(left);

}

String right= judgeYear(rightYear, year, "C");if (right != null) {

error.add(right);

}

}else{

rowIndex++;

logger.info("---rowIndex={}--------", rowIndex);

Zwmxz it= newZwmxz();//遍历每一行的每一列数据,并校验

for(var col : row.getValue().entrySet()) {switch(col.getKey()) {case 1:if (col.getValue() == null) {

error.add("序号为【" + rowIndex + "】的数据的B列【月份】不可为空!");

}else{if(Pattern.matches(pattern, col.getValue().trim())) {if (Integer.parseInt(col.getValue().trim()) ==month) {

it.setMonth(month);

}else{

error.add("序号为【" + rowIndex + "】的数据的B列【月份】与当前期间的月份不一致!");

}

}else{

error.add("序号为【" + rowIndex + "】的数据的B列【月份】需要是正常的阿拉伯数字月份!");

}

}break......................................................case 16:if (col.getValue() == null) {

it.setYe(BigDecimal.ZERO);

}else{if(Pattern.matches(pattern, col.getValue().trim())) {

it.setYe(newBigDecimal(col.getValue()));

}else{

it.setYe(BigDecimal.ZERO);

}

}break;case 17:

it.setSdocId(col.getValue());break;default:break;

}

}

it.setZtId(ztId);

it.setYear(year);

Date date= newDate();

it.setUpdatedAt(date);

it.setCreatedAt(date);

newZwmxz.add(it);

}

}

}//以上数据 若存在一条报错的数据,则全部导入失败!

if (error.size() > 0 ||hasErr) {

zwmxzRepository.deleteAllByZtIdAndYearAndMonth(ztId, year, month);

}else{for(var it : newZwmxz) {

zwmxzRepository.save(it);

}

}returnerror;

}private String judgeYear(String year1, intyear2, String position) {

String pattern= "^[0-9]+$";if (year1 == null) {return "Excel的" + position + "列的表头年份不可为空!";

}else{

String trim=year1.trim();if (trim.length() >= 4) {

String substring= trim.substring(0, 4);

logger.info("-----year1:{}", substring);if(Pattern.matches(pattern, substring)) {if (Integer.parseInt(substring) !=year2) {return "Excel的" + position + "列的表头年份与当前期间年份不一致!";

}

}else{return "Excel的" + position + "列的表头年份不规范!";

}

}else{return "Excel的" + position + "列的表头年份不规范!";

}

}return null;

}

easyexcel 检查表头是否匹配_easyexcel导入获取表头并且表头为不固定列相关推荐

  1. easyexcel 检查表头是否匹配_EasyExcel的不确定表头(根据数据生成表头)的excel导出和二级表头以及设置表头的宽度自适应...

    1.效果如图 2.Controller @GetMapping("/exportExcel")public void exportExcel(@RequestParam(value ...

  2. easyexcel导入获取表头并且表头为不固定列

    转自:http://t.zoukankan.com/pzw23-p-13354908.html easyexcel导入获取表头并且表头为不固定列 Controller @PostMapping(&qu ...

  3. easyexcel 检查表头是否匹配_利用easyexcel生成excel文件-自定义表头与数据栏对应的处理方式...

    前面几篇文章测试过用easyexcel生成动态表头,动态样式.特别是动态表头以及下面数据列表与表头字段的对应是采用注解方式实现的.但在实际工作中,有些到处是灵活生成的,也就是说对于同一个类,在不同的场 ...

  4. 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出

    目录 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出 一.导入和导出 二.导出数据为excel实现过程 三.将excel中的数据导入到数据库中 基于SpringB ...

  5. easyExcel实现单sheet多子表,并结合动态表头,复杂表头

    easyExcel实现单sheet多子表,并结合动态表头,复杂表头 一.实现目标 二.官方文档阅读 1.动态表头 2.单页面多子表 3.复杂表头 三.开始编码 测试主类 数据类LIst获取 表头lis ...

  6. 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据

      springboot篇章整体栏目:  [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合toke ...

  7. SAP 获取采购订单表头长文本

    SAP 获取采购订单表头长文本 长文本不是直接存在某个table中,你在(me23n)可以双击该文本,然后选择菜单goto->header,查看该文本的技术信息,然后通过function mod ...

  8. 你如何检查选择器是否匹配jQuery中的内容? [重复]

    本文翻译自:How do you check if a selector matches something in jQuery? [duplicate] This question already ...

  9. 如何验证服务器有没ftp服务,如何检查ftp服务器是否联机并获取它未生成的错误?...

    我是vb.net编程新手.我对vb的开发和理解有很长的路要走,但有一个我似乎无法解决的问题.我在我的电脑上托管一个ftp服务器,并且正在为它创建一个应用程序来连接到我的服务器并下载文件.所有示例代码的 ...

最新文章

  1. python3.5安装-linux系统安装python3.5
  2. Android 源码解析之AsyncTask
  3. allegro16.3 中的orcad capture CIS 无法打开何解决?
  4. python:数据操作小技巧
  5. g4e基础篇#1 为什么要使用版本控制系统
  6. 便宜的手机图传遥控模块
  7. 软键盘弹出时popwindow_【示例】解决软键盘弹出时底部元素上浮的问题
  8. 模仿还是致敬?华为全新环绕屏手机酷似小米MIX Alpha
  9. 排除表_【收藏】常见电气故障及排除故障方法
  10. VMware Fusion Pro for Mac虚拟机v12.2.0(18760249)中文版
  11. 自己学java需要多久_自学 java, 学多久可以自己找到工作?
  12. mysql数据库丢失还原_MySQL数据库丢失后如何自动恢复呢?
  13. [原创]Javascript 利用mousetrap.js进行键盘事件操作
  14. 面经——嵌入式常见面试题总结100题(上)
  15. Android之ListView
  16. Justinmind使用教程(6)——Justinmind的切换事件toggle
  17. 2022高处安装、维护、拆除考试题库及模拟考试
  18. 索引顺序查找(分块查找)
  19. 智力题集锦与详解——持续更新
  20. js和jQury实现Aajx

热门文章

  1. 解决ico图标不透明
  2. 一键收藏:OEE / TEEP / 六大损失 / SMED / 约束理论 / 持续改进 / 短间隔控制
  3. 汽车线束及连接器都有哪些检测项目
  4. 【计算机网络】应用层——文件传输协议/电子邮件/万维网WWW
  5. [转] 史玉柱:我是怎么做游戏策划的
  6. android实现浮动屏保,Android 屏保实现
  7. [CentOS Python系列] 二.pscp上传下载服务器文件及phantomjs安装详解
  8. 如何下载津南区卫星地图高清版大图
  9. 北邮计算机2015学霸,我国邮电大学“四大金刚”1所211比985还难考剩下3所非学霸难考上...
  10. A4988驱动NEMA步进电机(42步进电机)