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,一经查实,立即删除!

相关文章

java处理unicode_C# JavaScript Java 与 中文 unicode 处理

C#// 将汉字转换为Unicode//要转换的字符串///public static string GBToUnicode(string text){byte[] bytes System.Text.Encoding.Unicode.GetBytes(text);string lowCode "", temp "";for (int i 0; i{if (i % 20){temp System.Convert.ToString(by…

Leetcode--260. 只出现一次的数字Ⅲ

给定一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5] 注意&#xff1a; 结果输出的顺序并不重要&#xff0c;对于上面的例子&#xff0c; [5, 3] 也…

洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】

题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的&#xff0c;区间右边的人往区间最右的那些空位跑&#xff0c;区间左边的人往区间最左的那些空位跑 找到这些空位就用二分 主席树 理应可以在主席树上的区间二分而做到\(O(nlogn)\)&…

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

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

Leetcode--342. 4的幂

给定一个整数 (32 位有符号整数)&#xff0c;请编写一个函数来判断它是否是 4 的幂次方。 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶&#xff1a; 你能不使用循环或者递归来完成本题吗&#xff1f; 方法一&#xff1a; class Solution { public …

bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】

差分约束裸题&#xff0c;用了比较蠢的方法&#xff0c;先dfs_spfa判负环&#xff0c;再bfs_spfa跑最短路 注意到“奶牛排在队伍中的顺序和它们的编号是相同的”&#xff0c;所以\( d_i-d_{i-1}>0 \),连(i,i-1,0)&#xff1b;然后对于\( d_i-d_j<L \)&#xff0c;连(j,i,…

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

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

java script 技巧_java script 技巧

事件源对象event.srcElement.tagNameevent.srcElement.type捕获释放event.srcElement.setCapture();event.srcElement.releaseCapture();事件按键event.keyCodeevent.shiftKeyevent.altKeyevent.ctrlKey事件返回值event.returnValue鼠标位置event.xevent.y窗体活动元素document…

个人作业5——软工个人总结

一、请回望开学时的第一次作业&#xff0c;你对于软件工程课程的想象 对比开篇博客你对课程目标和期待&#xff0c;“希望通过实践锻炼&#xff0c;增强计算机专业的能力和就业竞争力”&#xff0c;对比目前的所学所练所得&#xff0c;在哪些方面达到了你的期待和目标&#xff…

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

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

java如何对list进行排序_java中如何对list进行排序

java类中用Collections的sort方法对一个list进行排序&#xff0c;比较简单先建一个User对象public class User {public String name;public Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}public String getName() {retu…

LR中url和html两种录制模式

http://www.cnblogs.com/fnng/archive/2013/02/28/2937805.html转载于:https://www.cnblogs.com/zzzao/p/9196044.html

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

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

Leetcode--3. 无重复字符的最长子串

给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符…

java语言_java语言学习

现在最流行的编程语言就是java了&#xff0c;学习java要怎样学习&#xff0c;有要注意哪些呢&#xff1f;首先要确定学习将来要干嘛&#xff0c;确定好之后就一直朝着这个方向努力&#xff0c;不放弃就行了。首先&#xff0c;需要明确的是Java已经不是一门简单的语言&#xff0…

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

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

Leetcode--16. 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如&#xff0c;给定数组 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

洛谷 P1377 [TJOI2011]树的序 解题报告

P1377 [TJOI2011]树的序 题目描述 众所周知&#xff0c;二叉查找树的形态和键值的插入顺序密切相关。准确的讲&#xff1a;1、空树中加入一个键值\(k\)&#xff0c;则变为只有一个结点的二叉查找树&#xff0c;此结点的键值即为\(k\)&#xff1b;2、在非空树中插入一个键值\(k\…

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

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

Leetcode--209. 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。 示例: 输入: s 7, nums [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组…