未合并的单元格excel文件

    /*** 转换用户上传的excel文件为java对象** @param file  用户上传的文件* @param clazz 将被解析的类* @param <T>   泛型,任意类型* @return 返回解析数据的List形式* @throws IOException      文件读取异常* @throws EquipmentException 自定义异常*/public static <T> List<T> fromSimpleFile(final MultipartFile file, final Class<T> clazz) throws IOException, EquipmentException {return filterNullRow(EasyExcel.read(file.getInputStream(), clazz, null).ignoreEmptyRow(true).autoTrim(true).autoCloseStream(true).doReadAllSync());}

合并单元格的excel文件,readListener为解析合并单元格的类

    /*** 转换用户上传的excel文件为java对象,包含合并行** @param file         用户上传的文件* @param clazz        将被解析的类* @param <T>          泛型,任意类型* @param readListener 解决合并行* @return 返回解析数据的List形式* @throws IOException      文件读取异常* @throws EquipmentException 自定义异常*/public static <T> List<T> fromMergeFile(final MultipartFile file,final Class<T> clazz,final ReadListener<T> readListener) throws IOException, EquipmentException {return filterNullRow(EasyExcel.read(file.getInputStream(), clazz, readListener).extraRead(CellExtraTypeEnum.MERGE).ignoreEmptyRow(true).autoTrim(true).autoCloseStream(true).doReadAllSync());}

解析合并单元格函数,其实合并后就是excel的第一行有数据,其余为空行,把第一行的数据赋值给空行就可以了

public class OriginProtocolResolver <T> extends AnalysisEventListener<T> {/*** 解析出的数据*/private final LinkedHashMap<Integer, T> row2DataMap = new LinkedHashMap<>(256);/*** 合并单元格*/private final List<CellExtra> extraMergeInfoList = new ArrayList<>();@SneakyThrows@Overridepublic void invoke(OriginProtocol rowData, AnalysisContext analysisContext) {//读取到的每行数据,其key是以0开始的索引,可在这对每行都有的数据进行异常判定row2DataMap.put(analysisContext.readRowHolder().getRowIndex(), rowData);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {//所有行都解析完成this.explainMergeData(row2DataMap, extraMergeInfoList);}/*** 某行的数据解析失败*/@Overridepublic void onException(Exception exception, AnalysisContext context) {System.err.println("解析失败,但是继续解析下一行: " + exception.getMessage());// 如果是某一个单元格的转换异常 能获取到具体行号if (exception instanceof ExcelDataConvertException) {ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;System.err.println("第{}行,第{}列解析异常" + excelDataConvertException.getRowIndex() +excelDataConvertException.getColumnIndex());}}@Overridepublic void extra(CellExtra extra, AnalysisContext context) {switch (extra.getType()) {case MERGE: {extraMergeInfoList.add(extra);break;}case HYPERLINK: {break;}case COMMENT: {}default: {}}}/*** 处理合并单元格** @param data               解析数据* @param extraMergeInfoList 合并单元格信息*/private void explainMergeData(Map<Integer, T> data, List<CellExtra> extraMergeInfoList) {//循环所有合并单元格信息extraMergeInfoList.forEach(new Consumer<CellExtra>() {@SneakyThrows@Overridepublic void accept(CellExtra cellExtra) {int firstRowIndex = cellExtra.getFirstRowIndex();int lastRowIndex = cellExtra.getLastRowIndex();// 获取第一个不为空的,可在这对第一行就是数据完整的行进行错误判定T first = data.get(firstRowIndex);// 把剩下几个填充进去for (int i = firstRowIndex + 1; i <= lastRowIndex; i++) {T value= data.get(i);// 在这里把第一行的数据赋值给其他空行}}});}
}

EasyExcel解析excel(合并单元格和未合并)相关推荐

  1. html统计表合并单元格的快捷键,合并单元格快捷键,小编教你excel怎么合并单元格快捷键...

    合并单元格是我们经常要做的工作,如果有合并单元格的快捷键正是我们想要的,很遗憾,微软并没有直接提供这样一个快捷键,在excel表的运用中,难免会碰到希望将两个单元格合并的时候,那么怎么做呢?下面,小编 ...

  2. html表格里面怎么合并单元格的快捷键,合并单元格快捷键,教您excel怎么合并单元格快捷键...

    快捷键是大家办公常用的操作技巧,我们办公中经常会制作一些表格,为了让表格达到最终想要的效果,时常需要将Excel中多个单元格合并成一个单元格.当然,操作方法也有多种,下面,小编给大伙带来了excel合 ...

  3. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容...

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为"帮凶",制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要 ...

  4. html表格里面怎么合并单元格的快捷键,合并单元格快捷键ctrl加什么?

    01 先选择要合并的单元格,按CTRL+1键,再用"←"及"→"方向键移动到第二个选项卡,再按ALT+M键,再按确定,完成.Excel是Microsoft为使用 ...

  5. SAP ALV合并单元格示例(合并单元格为表头)

    前言 实现参考Enno Wulff的文章(德文):Zellen verbinden 在原有基础上新增了部分功能(支持输入合并单元格的显示值) 效果 代码 主程序 *&------------- ...

  6. python批量合并单元格_Python批量合并有合并单元格的Excel文件详解

    合并单元格 合并单元格相信大家都会,比如下面这段简单的代码就可以实现: app='Word' word=win32.gencache.EnsureDispatch('%s.Application' % ...

  7. html表格里面怎么合并单元格的快捷键,合并单元格快捷键:Excel怎么合并单元格...

    今天来聊聊一篇关于合并单元格快捷键:Excel怎么合并单元格的文章,现在就为大家来简单介绍下合并单元格快捷键:Excel怎么合并单元格,希望对各位小伙伴们有所帮助. 方法如下: 1.首先我们需要将&q ...

  8. 合并单元格两行_Excel合并单元格的麻烦事你都经历了哪些?来一起远离那些麻烦事...

    在我们日常的Excel表格处理中,为了版面的整洁.美观,往往对表格的一些单元格进行合并处理,显示或打印是倒也无所谓,但进行运算处理或者快速填充时,会带来一堆的麻烦事,运算结果不正确.不能快速填充等等, ...

  9. html合并单元格颜色,为合并单元格批量填充颜色

    为合并单元格批量填充颜色 由于工作的需要,小秦对某份工作表的部分单元格进行了合并操作,现在希望将这些合并单元格填充某一颜色,这样可以更醒目一些.如果采取纯手工 (本文共1页) 阅读全文>> ...

最新文章

  1. 邮件发送退信分析大全/SMTP error, RCPT TO: 550 Relay Deny
  2. mysql索引优化规则_Mysql优化选择最佳索引规则
  3. 计算机网络实验指导书实验报告,计算机网络实验一 熟悉常用的网络命令实验报告模板...
  4. matlab 二次指数平滑法预测
  5. JVM结构、内存分配、垃圾回收算法、垃圾收集器。
  6. iOS内存管理知识点
  7. collections模块的Counter类
  8. es6 对象的扩展运算符
  9. Execution default of goal org.springframework.boot:spring-boot-maven-plugin
  10. navicat导出查询结果原理_使用Navicat生成ER关系图并导出
  11. java打包成jar_把Java程序打包成jar文件包并执行的方法
  12. alsa driver--card
  13. 爬取12306验证码图片
  14. WEB:小宁写了一个登陆验证页面,随手就设了一个密码。
  15. 在ADF应用中,能够通过 oracle.adf.view.rich.security.FRAME_BUSTING 参数来使用framebusting功能。
  16. Android Studio如何创建VR项目。
  17. Linux的基本使用和程序部署
  18. 4763: 雪辉[点分治+可持久化分块]
  19. C#合并两个(多个)集合
  20. 简单静态web页面+动画(小案例)

热门文章

  1. idea加密解密C++实现
  2. JPA、Hibernate和Spring Data JPA区别
  3. python输入esc退出循环_如何用Esc键停止GhPython或者RhinoPython脚本运行
  4. Android多点触控揭秘
  5. 免费天气查询工具类源码,开箱即用,根据中国气象局API编写。高效稳定
  6. Linux 3.10内核锁瓶颈描述以及解决-IPv6路由cache的性能缺陷
  7. 利用YOLOV5实现手语识别
  8. MyEclipse设置字体格式和大小,及字体推荐
  9. 灰狼优化算法(Grey Wolf Optimizer, GWO)
  10. 【实践】多条曲线在一幅图上,Origin如何对每一条曲线单独设置