EasyExcel 文件导出 - 合并某些列值相同的行

2024-09-05 22:12

本文主要是介绍EasyExcel 文件导出 - 合并某些列值相同的行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • EasyExcel 文件导出 - 合并某些列值相同的行
    • 最终效果
    • 实现思路
    • 创建单元格合并的策略类
    • 使用

EasyExcel 文件导出 - 合并某些列值相同的行

在数据处理与文件导出的过程中,我们常常会遇到各种特定的需求。今天,我们就来探讨一下使用 EasyExcel 进行文件导出时,如何合并某些列值相同的行,以实现更加高效和整洁的数据呈现。

最终效果

下面对2、3、4列进行单元格合并。
在这里插入图片描述

实现思路

判断当前行与上一行对应的值是否相等,若相等则进行合并操作。整个过程十分简洁明了。

创建单元格合并的策略类

注意:下面有使用lombok包,我的EasyExcel版本是4.0.2

public class RowSameValueMergeStrategy extends AbstractMergeStrategy {/*** 需要合并的列位置索引*/private int[] mergeColumnIndexArray;// 记录mergeColumnIndexArray中每一列的上一行的值和索引private Map<Integer, ValueAndIndex> lastValueMap;/*** 用来记录上一次的值和索引,用于判断是否需要合并*/@Data@AllArgsConstructorstatic class ValueAndIndex {private String value;private int index;}public RowSameValueMergeStrategy(int[] mergeColumnIndexArray) {this.mergeColumnIndexArray = mergeColumnIndexArray;int initialCapacity = (int) Math.ceil(mergeColumnIndexArray.length / 0.75);lastValueMap = new HashMap<>(initialCapacity);}@Overrideprotected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {if (head == null) {return;}if (mergeColumnIndexArray == null) {return;}for (int i = 0; i < mergeColumnIndexArray.length; i++) {int mergeIndex = mergeColumnIndexArray[i];if (head.getColumnIndex() == mergeIndex) {String value = cell.getStringCellValue();int rowIndex = cell.getRowIndex();if (lastValueMap.get(mergeIndex) == null) {lastValueMap.put(mergeIndex, new ValueAndIndex(value, rowIndex));}ValueAndIndex valueAndIndex = lastValueMap.get(mergeIndex);Integer lastRowIndex = valueAndIndex.getIndex();String lastValue = valueAndIndex.getValue();// 合并值相同的相邻单元格,当前单元格合并上一个单元格if (Objects.equals(value, lastValue) && lastRowIndex != rowIndex) {sheet.addMergedRegionUnsafe(new CellRangeAddress(lastRowIndex, // 起始行rowIndex,     // 结束行mergeIndex,   // 起始列mergeIndex   // 结束列));}lastValueMap.put(mergeIndex, new ValueAndIndex(value, rowIndex));}}}}

使用

使用registerWriteHandler把上面的合并单元格的策略类注册即可。

         int[] mergeColumnIndexArray = {2, 3, 4}; // 要合并的列excelWriter = EasyExcel.write(outputStream, clazz).registerWriteHandler(new RowSameValueMergeStrategy(mergeColumnIndexArray)).build();

这篇关于EasyExcel 文件导出 - 合并某些列值相同的行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140207

相关文章

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin