Java导出excel合并行功能

导出的excel需要上下行相同的数据进行行合并的功能。如图显示

这里我使用的是项目框架自带的导出模板代码,是在这套模板基础之上做的修改。

// 我主要演示的就是mergeRows方法的操作,dataList是导出数据的集合。
workbook = ExcelTools.expData(workbook, templateSheet);
// 合并行操作
cseQuotaManageCheckService.mergeRows(workbook, dataList);

这是mergeRows方法。

// 合并行操作public void mergeRows(Workbook workbook, List<?> dataList) {if (dataList.isEmpty()) {return;}Sheet sheet = workbook.getSheetAt(0);int startRow = 2;  // 数据从第 2 行开始int deptNameCol = 1;  // 从第几列开始int benchmarkScoreCol = 2;int finalScoreCol = 3;int daunScoreCol = 4;int i = 0;while (i < dataList.size()) {int mergeStart = i;CseQuotaManageCheckVO current = (CseQuotaManageCheckVO) dataList.get(i);// 查找连续相同的数据行while (i < dataList.size() - 1) {CseQuotaManageCheckVO next = (CseQuotaManageCheckVO) dataList.get(i + 1);if (current.getDeptName().equals(next.getDeptName()) &&current.getBenchmarkScore().equals(next.getBenchmarkScore()) &&current.getFinalScore().equals(next.getFinalScore()) &&current.getDaunScore().equals(next.getDaunScore())) {i++;} else {break;}}// 如果找到多个连续相同的行,则合并它们if (mergeStart != i) {mergeCellsIfNotOverlap(sheet, startRow + mergeStart, startRow + i, deptNameCol, deptNameCol);mergeCellsIfNotOverlap(sheet, startRow + mergeStart, startRow + i, benchmarkScoreCol, benchmarkScoreCol);mergeCellsIfNotOverlap(sheet, startRow + mergeStart, startRow + i, finalScoreCol, finalScoreCol);mergeCellsIfNotOverlap(sheet, startRow + mergeStart, startRow + i, daunScoreCol, daunScoreCol);}// 继续下一个不相同的数据行i++;}}// 解决要合并的区域已经存在合并单元格private void mergeCellsIfNotOverlap(Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {CellRangeAddress newRegion = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);for (int i = 0; i < sheet.getNumMergedRegions(); i++) {CellRangeAddress existingRegion = sheet.getMergedRegion(i);if (isOverlapping(existingRegion, newRegion)) {return;  // 跳过合并,因为它与现有合并区域重叠}}sheet.addMergedRegion(newRegion);// 居中操作applyCellStyle(sheet, newRegion);}// 对合并后的行数据内容进行居中显示操作private void applyCellStyle(Sheet sheet, CellRangeAddress region) {Workbook workbook = sheet.getWorkbook();CellStyle centeredStyle = workbook.createCellStyle();centeredStyle.setAlignment(HorizontalAlignment.CENTER);centeredStyle.setVerticalAlignment(VerticalAlignment.CENTER);for (int row = region.getFirstRow(); row <= region.getLastRow(); row++) {for (int col = region.getFirstColumn(); col <= region.getLastColumn(); col++) {Row sheetRow = sheet.getRow(row);if (sheetRow == null) {sheetRow = sheet.createRow(row);}Cell cell = sheetRow.getCell(col);if (cell == null) {cell = sheetRow.createCell(col);}cell.setCellStyle(centeredStyle);}}}private boolean isOverlapping(CellRangeAddress region1, CellRangeAddress region2) {return !(region1.getLastRow() < region2.getFirstRow() ||region1.getFirstRow() > region2.getLastRow() ||region1.getLastColumn() < region2.getFirstColumn() ||region1.getFirstColumn() > region2.getLastColumn());}

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

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

相关文章

【Linux】性能分析器 perf 详解(二)

上一篇:【Linux】性能分析器 perf 详解(一) 1、perf命令列表 annotate 读取perf.data(由perf record生成)并结合源代码展示详细的性能分析结果,包括CPU执行热点、函数调用栈等信息。archive 使用perf.data文件中找到的带构建标识符的对象文件创建归档文件,便于后续对这…

大厂面试官问我:Redis中热key和大key是怎么解决的?【后端八股文五:Redis热key和大key八股文合集】

往期内容&#xff1a; 大厂面试官问我&#xff1a;Redis处理点赞&#xff0c;如果瞬时涌入大量用户点赞&#xff08;千万级&#xff09;&#xff0c;应当如何进行处理&#xff1f;【后端八股文一&#xff1a;Redis点赞八股文合集】-CSDN博客 大厂面试官问我&#xff1a;布隆过滤…

【OceanBase诊断调优】—— 如何缩短OceanBase 数据库执行 count(*) 的时间

本文介绍影响 OceanBase 数据库执行 count(*) 时间的因素以及缩短 count(*) 执行时间的方法。 适用版本 OceanBase 数据库所有版本 执行 count(*) 的时间 OceanBase 数据库中&#xff0c;执行 count(*) 的时间不仅与选择的行数&#xff0c;还与行的长度相关。这是由于对主表…

振兴黄河新生力 打造文旅新地标——全国首家黄河会客厅在山东济南启幕

6月26日&#xff0c;由黄河文化发展工作站组织实施的全国首家黄河会客厅平台发布会暨山东基地启动仪式在济南成功召开。黄河会客厅以“民生黄河、生态动能、中华文明”为核心主题&#xff0c;融汇黄河智库、黄河文明、黄河产域、黄河金融、黄河科创、黄河物贸六大振兴赋能体系&…

计算机视觉:项目实战

目录 SSD1.安装ananconda2.安装cuda和cudnn3.配置Pytorch环境3.1 pytorch环境的配置与激活3.2 pytorch库的安装3.3 其它依赖库的安装 遇到的问题&#xff1a;1.EOFError: Ran out of input.2.No module named dlib. SSD 1.安装ananconda 见另一篇博文&#xff1a;https://blo…

【LeetCode】每日一题:LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1 …

maven-jar-plugin在springboot中打包成普通引用的jar

如果您想要创建一个不包含Spring Boot特定结构的普通jar包&#xff08;例如&#xff0c;一个可以被其他项目作为依赖引用的库&#xff09;&#xff0c;您需要在pom.xml中添加maven-jar-plugin的配置。这里是一个示例配置&#xff0c;它将创建一个带有lib分类器的jar包&#xff…

OpenAI API一键搬家,天工推出开发者迁移计划

6月25日&#xff0c;OpenAI宣布称将于今年7月9日开始封锁来自非支持国家和地区的API流量。此后&#xff0c;来自中国大陆、中国香港等地的开发者将无法使用OpenAI API提供服务。 为了助力开发者高效切换至国内大模型&#xff0c;天工开放平台&#xff08;https://model-platfo…

Java项目分层(持续更新中)

第一次更新时间2024.6.26 分包 实体类 功能类 工具类 分层 实体类层 我们要操作的对象&#xff0c;Book,Student... 控制层 控制请求转发 业务层 处理业务 数据层 连接数据库 处理数据 工具类层 JDBC等工具类 测试层 最终启动项目 明确我们所要做的业务之后&a…

[深度学习] 图神经网络GNN

图神经网络&#xff08;Graph Neural Network, GNN&#xff09;是一类用于处理图结构数据的深度学习模型。图是一种重要的数据结构&#xff0c;广泛应用于社交网络、分子化学、推荐系统、交通网络等领域。GNN的出现使得能够有效地在图结构数据上进行学习和推理。以下是GNN的详细…

电脑突然提示dll文件丢失,怎么选择正确的恢复方法?

电脑突然提示dll文件丢失&#xff1f;其实当你的电脑使用久了&#xff0c;出现这种dll文件丢失是非常的正常的&#xff0c;毕竟你总会有不恰当的操作吧&#xff1f;这些操作都是会导致dll文件丢失的。丢失了&#xff0c;我们直接进行相关的修复就好了&#xff0c;还是比较简单的…

# linux 系统中,使用 “ ll “ 命令报错 “ bash ll command not found “ 解决方法:

linux 系统中&#xff0c;使用 " ll " 命令报错 " bash ll command not found " 解决方法&#xff1a; 一、错误描述&#xff1a; 报错原因&#xff1a; 1、这个错误表明你尝试在 bash shell 中执行 ll 命令&#xff0c;但是系统找不到这个命令。ll 通常…

C++之模板(二)

1、类模板 2、使用类模板 类模板在使用的时候要显示的调用是哪种类型&#xff0c;而不是像函数模板一样能够根据参数来推导出是哪种类型。 Stack.h #include <stdexcept>template <typename T> class Stack { public:explicit Stack(int maxSize);~Stack();void …

银河麒麟桌面操作系统V10SP1【FTP服务器】配置手册

简介: FTP是一个文件传输协议,主要是在互联网上提供文件储存和访问服务的计算机,一个FTP服务器可以对多个客户端提供服务。本文主要介绍在银河麒麟桌面操作系统V10SP1上如何搭建FTP服务器以及在客户端如何访问FTP服务器的操作方法。 正文: 一、操作环境 服务端:银河麒…

C# unknow column “p0.TaskTypeId‘ in ‘field list‘

这个问题就是数据库出现问题&#xff0c;去 日志中去看 &#xff0c;找个具体表去 看实体类&#xff0c;与数据库中的表&#xff0c;是否存在字段。

数字化采购管理革新:全过程数字化采购管理平台的架构与实施

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;采购管理正逐步迈向全流程的数字化。本文将详细解析全过程数字化采购管理平台的技术架构和实施策略&#xff0c;探讨如何通过Spring Cloud、Spring Boot2、Mybatis等先进技术和服务框架&#xff0c;实现从供应商管理到采购招投…

Perl中的eval块:深入解析与应用

引言 Perl是一种功能强大的脚本语言&#xff0c;以其灵活性和强大的文本处理能力而闻名。在Perl编程中&#xff0c;eval块是一个非常重要的特性&#xff0c;它允许开发者捕获和处理异常&#xff0c;同时也提供了一种执行动态代码的方法。本文将详细探讨eval块的作用、用法以及…

示例:WPF中推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox

一、目的&#xff1a;推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox 二、效果 实现功能&#xff1a;设置菜单显示位置&#xff0c;最小宽度&#xff0c;最大宽度&#xff0c;位置持久化保存 三、环境 VS2022 Net7 四、使用方式 1、安装nuget包&#xff1a;H…

使用AI机器学习,轻松解决化合物配比优化问题

为什么需要化合物配比的优化&#xff1f; 在化合物制造行业中&#xff0c;化合物的配比是产品质量控制的关键环节。 化合物制造流程 目前&#xff0c;这一过程高度依赖于材料专家和工程技术人员的经验&#xff0c;通过反复试验来验证产品性能&#xff0c;确保其满足市场和客户的…

聊聊测试数据的生成方法及优缺点

开发人员转测过来需求后&#xff0c;有的时候相关需求的测试数据要求比较多&#xff0c;有的时候在前端生成所需的有效测试数据&#xff0c;涉及到的业务流程比较繁琐&#xff0c;时间都耗在了造测试数据上&#xff0c;转测过来的需求还没有正式进入测试状态&#xff0c;在测试…