EasyExcel中处理内容占多个单元格

在一些业务需求中内容需要占用多个单元格的情况,如下图:
在这里插入图片描述
或者是这样
在这里插入图片描述
这样
在这里插入图片描述
总有一些奇怪怪的需求。
在这里插入图片描述
不过使用EasyExcel可以轻松处理这些变态的需求。EasyExcel中提供了@ContentLoopMerge 注解就是为了处理这种问题的。下面先看看如何使用@ContentLoopMerge 注解完成上面三个图中excel的合并。


  • 完成图一

    • 创建类模型配置相关注解
    publuc  class User {private String name;private String age;@ContentLoopMerge(eachRow = 4)private String address;
    }
    
  • 完成图二

    • 创建类模型配置相关注解
    public class User {private String name;private String age;@ContentLoopMerge(columnExtend = 4)private String address;
    }
    
  • 完成图三

    • 创建类模型配置相关注解
    public class User {private String name;private String age;@ContentLoopMerge(eachRow = 4, columnExtend = 5)private String address;
    }
    
  • 主测试类

public class Test{public static void mian(String[] args){List<User> userList = new ArrayList<>();User user = new User();user.setName("李四");user.setAge("12");user.setAddress("火星xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");userList.add(user);EasyExcel.write("F:\\excel\\a.xls", User.class).sheet().doWrite(userList);}
}

在这里插入图片描述


下面看看EasyExcel如何实现。

  • 注解@ContentLoopMerge
/*** 内容循环合并*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ContentLoopMerge {/*** 当前属性扩展行** @return*/int eachRow() default 1;/*** 当前属性扩展列** @return*/int columnExtend() default 1;
}
  • 在通过内容合并拦截器处

/*** 循环合并的区域**/
public class LoopMergeStrategy implements RowWriteHandler {/*** 当前属性扩展行*/private final int eachRow;/*** 当前属性扩展列*/private final int columnExtend;/*** 当前属性列索引*/private final int columnIndex;public LoopMergeStrategy(int eachRow, int columnIndex) {this(eachRow, 1, columnIndex);}public LoopMergeStrategy(int eachRow, int columnExtend, int columnIndex) {if (eachRow < 1) {throw new IllegalArgumentException("EachRows must be greater than 1");}if (columnExtend < 1) {throw new IllegalArgumentException("ColumnExtend must be greater than 1");}if (columnExtend == 1 && eachRow == 1) {throw new IllegalArgumentException("ColumnExtend or eachRows must be greater than 1");}if (columnIndex < 0) {throw new IllegalArgumentException("ColumnIndex must be greater than 0");}this.eachRow = eachRow;this.columnExtend = columnExtend;this.columnIndex = columnIndex;}public LoopMergeStrategy(LoopMergeProperty loopMergeProperty, Integer columnIndex) {this(loopMergeProperty.getEachRow(), loopMergeProperty.getColumnExtend(), columnIndex);}// 核心:在完成行内容写入完成后会调用此方法进行处理合并@Overridepublic void afterRowDispose(RowWriteHandlerContext context) {if (context.getHead() || context.getRelativeRowIndex() == null) {return;}if (context.getRelativeRowIndex() % eachRow == 0) {CellRangeAddress cellRangeAddress = new CellRangeAddress(context.getRowIndex(),context.getRowIndex() + eachRow - 1,columnIndex, columnIndex + columnExtend - 1);context.getWriteSheetHolder().getSheet().addMergedRegionUnsafe(cellRangeAddress);}}
}

在这里插入图片描述

以上结合源码简单说明了内容合并具体还得自行学习源码.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021十大科技趋势来了!阿里巴巴达摩院全新发布

来源&#xff1a; 阿里技术阿里巴巴达摩院发布2021十大科技趋势&#xff0c;这是达摩院成立三年以来第三次发布年度科技趋势。2020年是不平凡的一年&#xff0c;经历疫情的洗礼&#xff0c;许多行业重启向上而生的螺旋&#xff0c;但疫情并未阻挡科技前进的脚步&#xff0c;量子…

从GPT-3到DETR,一起来盘点2020有哪些突破?

来源&#xff1a;深度学习技术前沿2020年是巨大飞跃的一年。从OpenAI的GPT-3&#xff0c;再到AlphaFold&#xff0c;都是令人振奋的成就。与此同时&#xff0c;数据科学在机器学习、自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域中蓬勃发展。一起来逐一盘点2020的…

我国5G基站达71.8万个,助力人工智能发展!

来源&#xff1a;新华社2020中国人工智能高峰论坛暨中国人工智能大赛成果发布会23日在厦门举办。论坛上&#xff0c;中国工业和信息化部副部长刘烈宏介绍&#xff0c;截至今年11月&#xff0c;我国累计建成5G基站71.8万个&#xff0c;为人工智能海量数据的成长和传输提供了坚实…

《自然》预测2021年值得关注的科学事件

来源&#xff1a;世界科技研究与发展作者&#xff1a;黄小容2020年12月22日&#xff0c;Nature官网发布了对2021年最值得关注科学事件的预测。1 气候变化问题卷土重来

重磅!基金委发布科研不端行为调查处理办法

编辑 ∑Gemini来源&#xff1a;国家自然科学基金委关于印发《国家自然科学基金项目科研不端行为调查处理办法》的通知国科金发诚〔2020〕96号各局&#xff08;室&#xff09;、科学部&#xff0c;机关党委&#xff0c;各直属单位&#xff1a;《国家自然科学基金项目科研不端行为…

不能编程、烧钱、没用?潘建伟直播回应“九章”量子计算争议

来源&#xff1a;腾讯科技在200秒时间内&#xff0c;76个光子穿过中国科学技术大学潘建伟团队精心构筑的光学网络&#xff0c;完成了5000万个样本的高斯玻色采样。而同样一道数学题交给世界上最顶尖 的超级计算机“富岳”&#xff0c;需要6亿年&#xff0c;差距超过了百万亿&a…

2021年,神经科学AI有这几大趋势

来源&#xff1a;The Next Web作者&#xff1a;Tristan Greene编译&#xff1a;科技行者新的一年正向我们招手。延续优良的革命传统&#xff0c;又到了发布最新一期AI专家预测报告的时候。各位受访专家将结合自己的所感所知、实验室发现以及企业动态为我们预测新一年中人工智能…

深度遍历和广度遍历

深度优先 例如下图&#xff0c;其深度优先遍历顺序为 1->2->4->8->5->3->6->7 广度优先 如下图&#xff0c;其广度优先算法的遍历顺序为&#xff1a;1->2->3->4->5->6->7->8 转载于:https://www.cnblogs.com/bigman-bugman/p/920252…

java ejb项目_Maven创建EJB项目结构

可以用maven创建EJB项目的结构。1、打开cmd2、输入一下内容mvn archetype:generate -DarchetypeGroupIdorg.codehaus.mojo.archetypes -DarchetypeArtifactIdpom-root -DarchetypeVersion1.1 -DarchetypeRepositoryhttp://repo.maven.apache.org/maven2 -DgroupIdcom.XXX -Dart…

2020年人工智能十大技术进展

pixabay.com来源&#xff1a;知识分子 撰文 &#xff1a; 全体智源学者制版编辑&#xff1a;卢卡斯编者按编者按2020年即将过去&#xff0c;今年人工智能领域有哪些重大进展&#xff1f;位于北京的智源人工智能研究院请 “智源学者” 们从全球的研究成果中评选了一份年度成就名…

CentOS 6快捷安装RabbitMQ教程

1.安装Erlang yum install erlang 2.安装RabbitMQ yum install rabbitmq-server 3.配置开机自启动 chkconfig rabbitmq-server on 4.启动RabbitMQ service rabbitmq-server start 5.查询RabbitMQ路径 whereis rabbitmq 6.进入目录 7.开启RabbitMQ的Web管理界面 ./rabbitmq-plug…

java视频压缩 lz4_关于LZMA和LZ4压缩的疑惑解析

原标题&#xff1a;关于LZMA和LZ4压缩的疑惑解析这是第112篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题&#xff0c;建议阅读时间10分钟&#xff0c;认真读完必有收获。UWA QQ群&#xff1a;465082844(仅限技术交流)AssetBundleQ&#xff1a;…

微积分的发现是人类精神的最高胜利

来源 &#xff1a; 数学英才微积分早期的思想基础在25岁以前的伽利略就开始作了一系列实验&#xff0c;发现了许多有关物体在地球引力场运动的基本事实&#xff0c;最基本的就是自由落体定律。开普勒在1619年前后归纳为著名的行星运动三大定律。这些成就对后来的绝大部份的数学…

数据库MySQL/mariadb知识点——触发器

触发器 触发器&#xff1a;trigger&#xff0c;是指事先为某张表绑定一段代码&#xff0c;当表中的某些内容发生改变&#xff08;增、删、改&#xff09;的时候&#xff0c;系统会自动触发代码并执行。 触发器包含三个要素&#xff0c;分别为 事件类型&#xff1a;增删改&#…

【前沿技术】2021九大技术趋势:规模化机器学习、「零信任」架构

来源&#xff1a;智能研究院《德勤2021年技术趋势》报告研究了疫情一年来对企业战略、运营和技术带来的连锁反应&#xff0c;论述了其重大发现&#xff1a;全球企业正在加速数字化战略转型&#xff0c;从而构建「韧性」、开创全新的经营模式。报告讨论了接下来18至24个月及以后…

Java项目打包成exe的详细教程

Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步&#xff1a; 1、 利用Eclipse先把Java项目先打成jar包 2、 利用exe4j工具把jar包转成exe 这里以Java项目&#xff08;ExeDemo&#xff09;为例进行讲解 随便在一个位置新建一个文件夹&#xff0c;文件夹的名称也…

数学史上的哲学绝唱——无穷观与数学基础的争论

来源&#xff1a;《广西民族大学学报》2014年11月作者&#xff1a;郭龙先&#xff0c;黄永两千多年来&#xff0c;数学家们一直试图从少数公理出发&#xff0c;根据明确给出的演绎规则推导出其他数学定理&#xff0c;从而把整个数学构造成为一个严密的演绎大厦&#xff0c;然后…

Leetcode--141. 环形链表

给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有环。 示例 1&#xff1a; 输入&#xff1a;head …

解读自动驾驶的2020:从硬件角度看,无人车商业化落地难在哪?

来源 &#xff1a;AI前线作者 &#xff1a;滴滴自动驾驶技术团队策划 &#xff1a;陈思「重点问题」什么是合适的无人驾驶车辆平台&#xff1f;复杂场景下的“无人驾驶”&#xff0c;传感器硬件系统还有哪些挑战&#xff1f;告别 demo 硬件系统后&#xff0c;下一个前装量产的必…

Leetcode--142. 环形链表Ⅱ

给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有…