之前小小的接触过easyExcel,代替了传统的poi,上次使用的时候,表头比较传统,也不复杂,但是这次呢表头稍微有点复杂,读取数据要从指定的位置开始,要从指定位置开始读取easyExcel,所以呢在不断的摸索之后,找到了合适的解决方法。

大佬请绕道,此次记录主要是为了自己下次方便查看。

1.先看下我的表头,如下图:1-5行都是表头

要开始读取数据,第6行才是真正的数据,直接上代码,看下图标红的地方,headRowNumber(),不写默认是1,即就是从第二行开始读数据。

2. 说下导入数据的流程:

1.)表头校验: invokeHeadMap()方法。

/**

* @param headMap 传入excel头部(第一行数据)数据的index,name

* 校验excel头部格式,必须完全匹配

*/

int x=0;

@Override

public void invokeHeadMap(MapheadMap,AnalysisContext context) {

x++;

super.invokeHeadMap(headMap, context);

System.out.println(headMap.size());

if(x==3 && headMap.size()!=20) {

teamList.add("解析Excel出错,请传入正确模板的Excel");

}

}

2.)一条一条数据解析  invoke()方法  ,方法里面是我业务逻辑,数据校验。MedBatchDetailsPerExcel 就是每行具体的数据值

/**

* 这个每一条数据解析的时候都回来调用

*/

ListmedBatchDetailsList = new ArrayList<>();//要导入的数据

ListmedBatchDetailsList3=null;

@Override

public void invoke(MedBatchDetailsPerExcel data, AnalysisContext context) {

log.info("解析到一条数据:{}",JSON.toJSONString(data));

total++;

Integer rowIndex=context.readRowHolder().getRowIndex()+1;//+1行(实际中excel中第几行的数据)

MedBatchDetailsPer medBatchDetailsPer=importDataCheck1(data,rowIndex);

importDataCheck(data,rowIndex);

ListmedBatchDetailsList2 =repeatImportCheck(data,rowIndex);//重复导入校验

if (medBatchDetailsList2 != null && medBatchDetailsList2.size() > 0) {

medBatchDetailsList3.addAll(medBatchDetailsList2);

}

medBatchDetailsList.add(medBatchDetailsPer);

}

3.)所有数据解析完, doAfterAllAnalysed()方法,里面写的有保存数据方法。

/**

* 所有数据解析都完成之后,调用

*/

@Override

public void doAfterAllAnalysed(AnalysisContext context) {

// 这里也要保存数据,确保最后遗留的数据也存储到数据库

insertAllData(empId,medBatchDetailsList.size(),medBatchDetailsList,medBatchDetailsList3);

log.info("所有数据都解析完成!");

}

easyExcel步骤就这几步,具体业务逻辑不一样,只是个敲~~~此次主要记录复杂表头的导入,读取。

easyexcel 读取指定行数据_EasyExcel从指定位置开始读数据相关推荐

  1. EasyExcel读取第一行数据,读取表头

    在EasyExcel中默认是不会去读取表头数据的 我们在编写EasyExcel解析类的时候,继承了AnalysisEventListener类 看一下该类的结构,可以看到它有invokeHeadMap ...

  2. python删除文件指定行

    我们现在有五行数据,我们想删除第三行:pig 删除文本指定行: 删除文本指定行用的是for i in i,找到指定行的关键字,将不包括关键字的其他行放在生成器中,将生成器包含的内容重新写入文件. 我们 ...

  3. jtable如何从表格中定位_ja中怎样将一个JTable表中的指定行添加到数据库

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:ja中怎样将一个JTable表中的指定行添加到数据库用的是回答:你首先得获取你选择的指定行 (getselectrow()方法),再 ...

  4. 30_Pandas.DataFrame提取(选择)指定行名和列名的行和列

    30_Pandas.DataFrame提取(选择)指定行名和列名的行和列 从pandas.DataFrame中提取(选择)行名称(索引名称)和列名称(列名称)满足特定条件的行或列. 了解如何提取元素包 ...

  5. 用java实现在txt文本中写数据和读数据

    向文本中写数据,一般这些数据我们用来做自动化测试.通过我们制定的一些生成数据的规则,能够快速写数据到文本中. 下面是写数据到txt文本(当然我们可以根据自己的需要写到doc.docx.xlx.xlsx ...

  6. easyexcel 读取指定行数据_Excel怎么设置只提取指定行中的数据?

    Excel怎么设置只提取指定行中的数据?有些时候我们需要从一个excel文件中的数据库中提取指定的行或列中的数据.例如如图示,是国内所有上市公司的行业统计.但是现在我们只需要其中部分上市公司的行业统计 ...

  7. python pandas库读取excel/csv中指定行或列数据详解

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...

  8. python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据

    文章目录: 1 数据说明 2 把数据集文件信息使用python pandas保存成csv文件 3 使用python pandas 读取csv的每行.每列数据 1 数据说明 1.在test_data目录 ...

  9. MATLAB中批量从txt文件中读取指定行的数据保存为txt文件

    经常遇到,我们想要读取的数据,不是从头开始读取的,我们往往要求从固定的行开始读取,MATLAB代码如下: function readData() %从指定行开始读取数据 readFilePath='C ...

最新文章

  1. dcut matlab,cut 命令详解
  2. Docker 不香吗,为啥还要 K8s?
  3. IIS7下 301重定向 添加WWW
  4. Xcode 9 新建的工程如何支持 iOS 8
  5. BZOJ4503 两个串 【fft】
  6. 小说阅读网站设计HTML,40多个漂亮的网页表单设计实例
  7. SQL Server 插入数据报IDENTITY_INSERT设置为off
  8. [Mac入门]如何在Mac下显示Finder中的所有文件
  9. [HTML5]使用Box2dWeb模拟飞行箭矢
  10. Spark MLlib(一)正则化特征
  11. eclipse生成ant build.xml打war包
  12. 夜曲编程python_python入门‼️夜曲编程‼️
  13. 【Java爬虫】爬取淘宝买家秀
  14. 电子与智能化工程专业承包资质标准
  15. java 量化指标_SAR指标配合阶段高低价的量化交易策略
  16. EasyExcel表头校验,表内容校验
  17. 51单片机流水灯现象1
  18. 计算机系统结构 2:局部性原理
  19. 谷歌地球不能用了?我敢说大部分人不知道真实原因
  20. Windows7重装系统后文件夹权限的混乱

热门文章

  1. Kindle 3---让声音来的更犀利些吧
  2. 多重背包java版本实现_楼天城男人八题——POJ1742 Coins
  3. Win7某服务无法启动的解决
  4. 一款有特色的虚拟化软件-云端软件平台
  5. ofbiz_web设置
  6. tf(Transform Frame)变换
  7. 中国黑客传说:周景平——我是超级黑
  8. OKR和KPI的区别
  9. 计算机英语mdd,mdd指令9342eec(中英文对照版最终版)(79页)-原创力文档
  10. 工具小软件——change case