EasyExcel解析excel(合并单元格和未合并)
未合并的单元格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(合并单元格和未合并)相关推荐
- html统计表合并单元格的快捷键,合并单元格快捷键,小编教你excel怎么合并单元格快捷键...
合并单元格是我们经常要做的工作,如果有合并单元格的快捷键正是我们想要的,很遗憾,微软并没有直接提供这样一个快捷键,在excel表的运用中,难免会碰到希望将两个单元格合并的时候,那么怎么做呢?下面,小编 ...
- html表格里面怎么合并单元格的快捷键,合并单元格快捷键,教您excel怎么合并单元格快捷键...
快捷键是大家办公常用的操作技巧,我们办公中经常会制作一些表格,为了让表格达到最终想要的效果,时常需要将Excel中多个单元格合并成一个单元格.当然,操作方法也有多种,下面,小编给大伙带来了excel合 ...
- 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容...
在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为"帮凶",制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要 ...
- html表格里面怎么合并单元格的快捷键,合并单元格快捷键ctrl加什么?
01 先选择要合并的单元格,按CTRL+1键,再用"←"及"→"方向键移动到第二个选项卡,再按ALT+M键,再按确定,完成.Excel是Microsoft为使用 ...
- SAP ALV合并单元格示例(合并单元格为表头)
前言 实现参考Enno Wulff的文章(德文):Zellen verbinden 在原有基础上新增了部分功能(支持输入合并单元格的显示值) 效果 代码 主程序 *&------------- ...
- python批量合并单元格_Python批量合并有合并单元格的Excel文件详解
合并单元格 合并单元格相信大家都会,比如下面这段简单的代码就可以实现: app='Word' word=win32.gencache.EnsureDispatch('%s.Application' % ...
- html表格里面怎么合并单元格的快捷键,合并单元格快捷键:Excel怎么合并单元格...
今天来聊聊一篇关于合并单元格快捷键:Excel怎么合并单元格的文章,现在就为大家来简单介绍下合并单元格快捷键:Excel怎么合并单元格,希望对各位小伙伴们有所帮助. 方法如下: 1.首先我们需要将&q ...
- 合并单元格两行_Excel合并单元格的麻烦事你都经历了哪些?来一起远离那些麻烦事...
在我们日常的Excel表格处理中,为了版面的整洁.美观,往往对表格的一些单元格进行合并处理,显示或打印是倒也无所谓,但进行运算处理或者快速填充时,会带来一堆的麻烦事,运算结果不正确.不能快速填充等等, ...
- html合并单元格颜色,为合并单元格批量填充颜色
为合并单元格批量填充颜色 由于工作的需要,小秦对某份工作表的部分单元格进行了合并操作,现在希望将这些合并单元格填充某一颜色,这样可以更醒目一些.如果采取纯手工 (本文共1页) 阅读全文>> ...
最新文章
- 邮件发送退信分析大全/SMTP error, RCPT TO: 550 Relay Deny
- mysql索引优化规则_Mysql优化选择最佳索引规则
- 计算机网络实验指导书实验报告,计算机网络实验一 熟悉常用的网络命令实验报告模板...
- matlab 二次指数平滑法预测
- JVM结构、内存分配、垃圾回收算法、垃圾收集器。
- iOS内存管理知识点
- collections模块的Counter类
- es6 对象的扩展运算符
- Execution default of goal org.springframework.boot:spring-boot-maven-plugin
- navicat导出查询结果原理_使用Navicat生成ER关系图并导出
- java打包成jar_把Java程序打包成jar文件包并执行的方法
- alsa driver--card
- 爬取12306验证码图片
- WEB:小宁写了一个登陆验证页面,随手就设了一个密码。
- 在ADF应用中,能够通过 oracle.adf.view.rich.security.FRAME_BUSTING 参数来使用framebusting功能。
- Android Studio如何创建VR项目。
- Linux的基本使用和程序部署
- 4763: 雪辉[点分治+可持久化分块]
- C#合并两个(多个)集合
- 简单静态web页面+动画(小案例)
热门文章
- idea加密解密C++实现
- JPA、Hibernate和Spring Data JPA区别
- python输入esc退出循环_如何用Esc键停止GhPython或者RhinoPython脚本运行
- Android多点触控揭秘
- 免费天气查询工具类源码,开箱即用,根据中国气象局API编写。高效稳定
- Linux 3.10内核锁瓶颈描述以及解决-IPv6路由cache的性能缺陷
- 利用YOLOV5实现手语识别
- MyEclipse设置字体格式和大小,及字体推荐
- 灰狼优化算法(Grey Wolf Optimizer, GWO)
- 【实践】多条曲线在一幅图上,Origin如何对每一条曲线单独设置