POI groupRow 折叠分组,折叠部分不显示问题
折叠组是什么?如图就是用POI 实现的,代码很简单:sheet.groupRow(开始行,结束行)即可

但是万万没想到,最终实现出的结果,合并的组,有一部分并没有渲染出来,如下图:


因为我的合并数据,是结合着数据逻辑的特殊动态计算出来的,一直认为是我算法的问题,或者是数据的问题,
这是我的算法,
合并组调用:List<List<Integer>> groupRows = setGroupRowE(startIndex,dataB);for(int i=0; i<groupRows.size(); i++) {sheet.groupRow(groupRows.get(i).get(0),groupRows.get(i).get(1));}
/*** 根据数据规则动态计算分组下标* @param startIndex* @param data* @return*/private List<List<Integer>> setGroupRowE(int startIndex,List<Map<String, Object>> data) {List<List<Integer>> groupRowAll = new ArrayList<>();List<List<Integer>> groupRow2 = new ArrayList<>();Map<String,List<Integer>> cache = new LinkedHashMap<>();int finalStartIndex = startIndex;for(int i = 0; i <data.size(); i++) {if(Constant.SYMBOL.equals(data.get(i).get(Constant.SEC_TYPE1))){// 第一级int finalI = i;int firstRow0 = groupRowAll.size() == 0 ? finalStartIndex : (int)groupRowAll.get(groupRowAll.size()-1).get(1)+1;List<Map<String, Object>> finalData1 = data;int count = (int) data.stream().filter((item)-> finalData1.get(finalI).get(Constant.RULE_TYPE).equals(item.get(Constant.RULE_TYPE)) && !Constant.SYMBOL.equals(item.get(Constant.SEC_TYPE1))).collect(Collectors.toList()).size();List<Integer> group1 = new ArrayList<>();if (count == 0) {group1 = Arrays.asList(firstRow0,firstRow0);groupRow2 = new ArrayList<>();System.out.println("---" +data.get(finalI).get(Constant.RULE_TYPE).toString()+ "---" + group1);cache.put(data.get(finalI).get(Constant.RULE_TYPE).toString(), group1);groupRowAll.add(group1);} else {group1 = Arrays.asList(firstRow0 + 1,firstRow0 + count);cache.put(data.get(finalI).get(Constant.RULE_TYPE).toString(), group1);System.out.println("---" +data.get(finalI).get(Constant.RULE_TYPE).toString()+ "---" + group1);groupRow2 = new ArrayList<>();groupRowAll.add(group1);}}if(Constant.SYMBOL.equals(data.get(i).get(Constant.SEC_TYPE))){// 第二级int finalI = i;int firstRow0 = groupRow2.size() == 0 ? cache.get(data.get(finalI).get(Constant.RULE_TYPE).toString()).get(0) : (int)groupRow2.get(groupRow2.size()-1).get(1)+1;List<Map<String, Object>> finalData = data;int count = (int) data.stream().filter((item)-> finalData.get(finalI).get(Constant.RULE_TYPE).equals(item.get(Constant.RULE_TYPE))&& finalData.get(finalI).get(Constant.SEC_TYPE1).equals(item.get(Constant.SEC_TYPE1))&& !Constant.SYMBOL.equals(item.get(Constant.SEC_TYPE))).collect(Collectors.toList()).size();List<Integer> group1 = Arrays.asList(firstRow0 + 1,firstRow0 + count);System.out.println("--------" +group1);groupRow2.add(group1);groupRowAll.add(group1);}}System.out.println(groupRowAll);return groupRowAll;}

经过反复调试,和数据比对,数据应该没问题,针对计算出来的合并组行和Excel的行进行比对,没有发现任何问题,现在很大程度上认为是POI的BUG。
问题解决
还好没有放弃,通过百度,和翻阅资料,找到了唯一的一篇文章https://www.5axxw.com/questions/content/u1sln7
里面的问题和我的问题一样,解决点来说就是在最初创建workbook对象,我new 的是SXSSFWorkbook对象,应该用XSSFWorkbook对象,那么他俩到底啥区别呢?

也就是我们用流操作workbook在操作时获取的不是一个完整的Workbook对象,它是为了防止内存溢出;知道这一点,只需要将SxssFWorkbook 改为XSSFWorkbook,Sheet 改为XSSFSheet 即可,其余不变


执行导出结果:



相关文章:
POI groupRow 折叠分组,折叠部分不显示问题
折叠组是什么?如图就是用POI 实现的,代码很简单:sheet.groupRow(开始行,结束行)即可 但是万万没想到,最终实现出的结果,合并的组,有一部分并没有渲染出来,如下图: 因为我…...
一、数据库基础
数据库 一、数据库基础 1、一些概念 数据库:数据库(DataBase ,简称DB),就是信息的集合。数据库是由数据库管理系统管理的数据的集合;数据库管理系统:简称DBMS 。是一种操纵和管理数据库的大型…...
Harmony OS教程学习笔记
基础知识 1.如何修改程序启动的第一个页面? 不想使用创建的默认的页面,这时需要修改启动页面,修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…...
605. 种花问题
链接 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中…...
Elasticsearch 常见的简单查询
查看es中有哪些索引 请求方式:GET 请求地址:http://localhost:9200 /_cat/indices?v 参数:无 结果: 查看索引全部数据 请求方式:GET 请求地址:http://localhost:9200/index-2023-08/_search 参数&a…...
C#使用xamarin进行跨平台开发
使用 Xamarin 进行跨平台开发可以使用 C# 和 .NET 平台来开发移动应用程序,同时将代码在多个主要移动操作系统上运行,包括 Android 和 iOS。以下是在 C# 中使用 Xamarin 进行跨平台开发的一般步骤: 安装 Xamarin: 在开始之前&…...
xargs 的用法 在1个文件夹中批量删除文件,这些删除的文件名是另一个文件夹中的文件名。
xargs 的用法 在1个文件夹中批量删除文件,这些删除的文件名是另一个文件夹中的文件名。 1、问题背景 应用场景 1、问题背景 应用场景 在二进制部署docker时,会把docker的所有可执行文件复制到/usr/bin下。 如果说复制过去后,想要反悔&#x…...
集简云本周新增/更新:新增2大功能,集成2款应用,更新4款应用,新增近20个动作
本周更新概要 新增功能 新增功能:Claude2 新增功能:语聚AI对话助手对话背景设定 应用新增 新增应用:领星ERP 新增应用:slack(自建) 应用更新 更新应用:企业微信(代开发) 更新应用:阿里云效2020(新版…...
MySQL存储过程怎么写?看完这篇秒懂
今天测试一个数据展示模块,依赖于数据部推送数据,但是他们没有人员配合,为了赶工,于是自己徒手造数据,有些页面,要查看翻页和权限等相关的功能,手动造是不可能的,因为我懒....哈哈哈…...
STM32电源名词解释
STM32电源架构 常用名词 VCC Ccircuit 表示电路,即接入电路的电压。 VDD Ddevice 表示器件, 即器件内部的工作电压。 VSS Sseries 表示公共连接,通常指电路公共接地端电压。 VDDA Aanalog 表示模拟,是模拟电路部分的电源。主要为…...
《操作系统真象还原》学习笔记:第七章 中断
由于 CPU 获知了计算机中发生的某些事,CPU 暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU 继续执行刚才的程序。整个过程称为中断处理,也称为中断。 把中断按事件来源分类,来自…...
【学习笔记之vue】These dependencies were not found:
These dependencies were not found:方案一 全部安装一遍 我们先浅试一个axios >> npm install axios 安装完报错就没有axios了,验证咱们的想法没有问题,实行! ok...
【数据结构】实现栈和队列
目录 一、栈1.栈的概念及结构(1)栈的概念(2)栈的结构 2.栈的实现(1)类型和函数的声明(2)初始化栈(3)销毁(4)入栈(5&#x…...
APT60DQ20BG-ASEMI新能源功率器件APT60DQ20BG
编辑:ll APT60DQ20BG-ASEMI新能源功率器件APT60DQ20BG 型号:APT60DQ20BG 品牌:ASEMI 封装:TO-3P 恢复时间:>50ns 正向电流:60A 反向耐压:200V 芯片个数:2 引脚数…...
[Android Framework] 系统 ANR 问题排查实践小结
文章目录 背景卡顿的定义:卡顿分类:卡顿原因汇总ANR 出现的原理应用层导致ANR系统导致ANR日志抓取traces.txt 是如何生成的分析思路与验证相关日志分析data/anr/traces.txt其他分析思路如何分析生成的 trace.html 文件呢?最后解决参考:背景 本文记录了工作中遇到的Andorid …...
【Unity】Text文本组件的一些操作
Unity的Text组件的几种常见的操作方法 Text组件是Unity中用于在UI界面上显示文本的组件。它包含了一些常见的属性和方法,可以用来控制文本的内容、外观和交互。以下是一些常见的Text组件的操作: 设置文本内容:通过直接在Unity编辑器中的Text…...
如何通过tomcat下载映射下载文件
1.1找到tomcat服务器中server.xml文件 !--doBase是静态资源路径位置, path作用相当于设置的key, doBase作用相当于value --> <Context path"/download" docBase"E:\testBackData"></Context>1.2 找到tomcat服务器中web.xml文…...
Redis的8种数据结构和应用场景介绍,面试题答案
面试原题:你用过Redis哪些数据结构?(网易一面 2023)(面试题来自牛客网) 参考答案 后面有 详细答案解析,帮助更快记忆~ 参考答案共652字符,阅读约需1分8秒;全文共8694字符,阅读约需…...
Log4Qt日志框架(1)- 引入到QT中
Log4Qt日志框架(1)- 引入到QT中 1 下载源码2 简介3 加入到自己的项目中3.1 使用库文件3.2 引入源文件 4 说明 1 下载源码 github:https://github.com/MEONMedical/Log4Qt 官方(版本较老):https://sourceforge.net/projects/log4q…...
【算法刷题之哈希表篇(1)】
目录 1.哈希表基础理论2.leetcode-242. 有效的字母异位词(1)方法一:排序(2)方法二:哈希表 3.leetcode-349. 两个数组的交集(1)方法一:哈希表(2)方…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
