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

相关文章

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

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

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

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…

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

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

电脑突然提示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;实现从供应商管理到采购招投…

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

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

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

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

基于阿里云 OpenAPI 插件,让 Grafana 轻松实现云上数据可视化

作者&#xff1a;徽泠 引言 Grafana 作为市场上领先的开源监控解决方案之一&#xff0c;使得数据监控和可视化变得触手可及。作为一款开源的数据可视化和分析软件&#xff0c;Grafana 支持查询、可视化、提醒和探索您的各种数据&#xff0c;无论它们存储在何处。Grafana 通过…

AIGC笔记--U-ViT的简单代码实现

1--前言 原论文&#xff1a;All are Worth Words: A ViT Backbone for Diffusion Models 完整可debug的代码&#xff1a; 2--结构 3--简单代码 以视频作为输入&#xff0c;实现上图红色框的计算&#xff1a; import torch import torch.nn as nn from einops import rearran…

Linux-笔记 OverlayFS文件系统入门

目录 前言 主要概念 工作原理 特点特性 1、上下合并 2、同名文件覆盖 3、同名目录合并 4、写时拷贝 实操入门 内核配置 挂载文件系统 验证 1、同名文件覆盖 2、同名目录合并 3、写时拷贝 1&#xff09;验证新增文件或目录 2&#xff09;验证修改文件 3&…

昇思25天学习打卡营第3天|张量Tensor

张量Tensor 概念创建张量&#xff08;4种方式&#xff09;张量的属性张量索引张量运算Tensor与NumPy转换 概念 张量&#xff08;Tensor&#xff09;是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。张量是MindSpore网络运算中的基本数据结构。 创建张量&#xff08;4…

MySQL 7种Join的定义图解示范结果(所有join类型)

文章目录 MySQL 7种Join的定义&图解&示范&结果&#xff08;所有join类型&#xff09;基本知识笛卡尔积 建表&填充数据1-Join不带条件account筛选 1-Inner Join 内连接不带条件account相同where筛选玩点特殊的 2-Left Join 左连接不带条件account筛选 3-Right J…

安全技术和防火墙(iptables)

安全技术 入侵检测系统&#xff1a;特点是不阻断网络访问&#xff0c;主要是提供报警和事后监督&#xff0c;不主动介入&#xff0c;类似于监控。 入侵防御系统&#xff1a;透明模式工作&#xff0c;对数据包&#xff0c;网络监控&#xff0c;服务攻击&#xff0c;木马&#…

HTTP协议中的各种请求头、请求类型的作用以及用途

目录 一、http协议介绍二、http协议的请求头三、http协议的请求类型四、http协议中的各种请求头、请求类型的作用以及用途 一、http协议介绍 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应…

python flask 入门-helloworld

学习视频链接&#xff1a; 01-【前奏】课程介绍_哔哩哔哩_bilibili 1.安装flask pip install flask 踩坑记&#xff1a;本机不要连代理&#xff0c;否则无法install 提示报错valueError: check_hostname requires server_hostname 2.程序编写 在根目录下创建 app.py fr…