【POI-EXCEL-下拉框】POI导出excel下拉框数据太多导致下拉框不显示BUG修复
RT
最近在线上遇到一个很难受的BUG,我一度以为是我代码逻辑出了问题,用了Arthas定位分析之后,开始坚定了信心:大概率是POI的API有问题,比如写入数据过多。

PS:上图为正常的下拉框。但是,当下拉选项过多时(跟多少无关,而是跟字节数有关),会导致下拉框内容显示失败
解决办法
功夫不负有心人,根据百度找到了这篇文章《ava POI 利用隐藏sheet实现导出下拉数据太多为空》。
解决思路是:
- 使用隐藏sheet来实现下拉框,抛弃旧有的方法
翻译成我这边的代码之后,如下:
创建下拉框单例:
import cn.hutool.core.collection.CollectionUtil;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint;
import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper;
import org.apache.poi.xssf.usermodel.XSSFSheet;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @author feng.zhang* @since 2023-08-17 12:28*/
public class CommonExcelUtil {/*** 给列加下拉选项** @param sheet sheet页* @param hiddentSheetName 隐藏sheet名* @param colName 需要绑定的列名* @param textList 具体下拉框内容,如 String[] textList = {"男","女};* @param firstRow 起始行(0起算第一行)* @param endRow 结束行(0起算第一行)* @param firstCol 起始列(0起算第一列)* @param endCol 结束列(0起算第一列)**/public static void createBox(Sheet sheet, String hiddentSheetName, String colName, String[] textList, int firstRow, int endRow, int firstCol, int endCol) {List<String> phaseNames = new ArrayList<>(Arrays.asList(textList));int row = CollectionUtil.isEmpty(phaseNames) ? 1 : phaseNames.size();String strFormula = hiddentSheetName + "!$" + colName + "$1:$" + colName + "$" + row;XSSFDataValidationConstraint hiddentConstraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST, strFormula);// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);// 数据有效性对象DataValidationHelper help = new XSSFDataValidationHelper((XSSFSheet) sheet);DataValidation validation = help.createValidation(hiddentConstraint, regions);sheet.addValidationData(validation);}
}
调用处代码:
private void setTopLevel(Workbook workbook) {String[] array = getDataArray();// 创建隐藏sheetfinal String hiddenSheetName = "hiddenSheetA";final String colName = "A";if (array.length > 0) {workbook.createSheet(hiddenSheetName);workbook.setSheetHidden(workbook.getSheetIndex(workbook.getSheet(hiddenSheetName)), true);Sheet sheet = workbook.getSheet(hiddenSheetName);//sheet.getLastRowNum无法区分 有一行和没有 所以这里先建一行sheet.createRow(0);int colNum = Integer.valueOf(colName.charAt(0)) - 65;Row row; //创建数据行sheet.setColumnWidth(colNum, 4000); //设置每列的列宽for (int j = 0; j < array.length; j++) {if (sheet.getLastRowNum() < j) {row = sheet.createRow(j); //创建数据行} else {row = sheet.getRow(j);}//设置对应单元格的值row.createCell(colNum).setCellValue(array[j]);}}CommonExcelUtil.createBox(workbook.getSheetAt(0), hiddenSheetName, colName, array, 2, topLevelArr.size() + 1000, 6, 6);}
感谢
感谢【博客园】大佬【作者:二次元的程序猿】的文章《ava POI 利用隐藏sheet实现导出下拉数据太多为空》
相关文章:
【POI-EXCEL-下拉框】POI导出excel下拉框数据太多导致下拉框不显示BUG修复
RT 最近在线上遇到一个很难受的BUG,我一度以为是我代码逻辑出了问题,用了Arthas定位分析之后,开始坚定了信心:大概率是POI的API有问题,比如写入数据过多。 PS:上图为正常的下拉框。但是,当下拉…...
【ES专题】ElasticSearch 高级查询语法Query DSL实战
目录 前言阅读对象阅读导航前置知识数据准备笔记正文一、ES高级查询Query DSL1.1 基本介绍1.2 简单查询之——match-all(匹配所有)1.2.1 返回源数据_source1.2.2 返回指定条数size1.2.3 分页查询from&size1.2.4 指定字段排序sort 1.3 简单查询之——…...
陕西某小型水库雨水情测报及大坝安全监测项目案例
项目背景 根据《陕西省小型病险水库除险加固项目管理办法》、《陕西省小型水库雨水情测报和大坝安全监测设施建设与运行管理办法》的要求,为保障水库安全运行,对全省小型病险水库除险加固,建设完善雨水情测报、监测预警、防汛道路、通讯设备、…...
pte rs练习方法 请介绍一下crank请介绍一下sanctuary请介绍一下solitary请介绍一下coarse请介绍一下deception
目录 pte rs练习方法 请介绍一下crank 请介绍一下sanctuary 请介绍一下solitary 请介绍一下coarse 请介绍一下deception pte rs练习方法 请介绍一下crank “Crank”一词可以个指不同的事物,具体含义视上下文而定。在不同的领域,这个词有不同的解…...
NLP之LSTM与BiLSTM
文章目录 代码展示代码解读双向LSTM介绍(BiLSTM) 代码展示 import pandas as pd import tensorflow as tf tf.random.set_seed(1) df pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astyp…...
【实现多个接口的使用】
文章目录 前言实现多个接口接口间的继承接口使用实例给对象数组排序创建一个比较器 总结 前言 实现多个接口 Java中不支持多继承,但是一个类可以实现多个接口 下面是自己反复理了很久才敲出来的,涉及到之前学的很多知识点 如果哪看不懂,真…...
Mac收集的几个终端命令
文章目录 转UTF-8编码格式打tag 包 命令:压缩加密文件显示隐藏文件取消Mac电脑安全模式 转UTF-8编码格式 cd到目录下 iconv -f gbk -t utf-8 gbk.txt > utf8.txt打tag 包 命令: cd到目录下 tar -cvf demo.tar.gz demo a demo压缩加密文件 cd 到文…...
206. 反转链表、Leetcode的Python实现
博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…...
VS2022 打包WPF安装程序最新教程(图文详解)
文章目录 前言一、安装打包Installer插件1、单独安装2、VS中在线安装二、使用步骤1、创建安装项目2、安装项目主界面3、添加项目输出4、添加快捷方式图标5、添加卸载项目a、新建项目b、添加项目输出c、创建快捷方式6、给快捷方式添加图标a、在Resource文件夹中添加图标文件b、选…...
清华大模型GLM
2022年,清华大学发布了一款具有重要意义的 GLM 大模型,它不仅在中文语言处理方面取得了显著的进展,还在英文语言处理方面表现出了强大的能力。GLM大模型区别于OpenAI GPT在线大模型只能通过API方式获取在线支持的窘境,GLM大模型属于开源大模型,可以本地部署进行行业微调、…...
实时数仓-hologres使用总结
我们回顾下,Hologres是一款实时HSAP产品,隶属阿里自研大数据品牌MaxCompute,兼容 PostgreSQL 生态、支持MaxCompute数据直接查询,支持实时写入实时查询,实时离线联邦分析,低成本、高时效、快速构筑企业实时…...
博客摘录「 TCP/IP网络编程——习题答案」2023年10月29日
clnt_sdaccept(serv_sd, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);read(clnt_sd, file_name, BUF_SIZE); fpfopen(file_name, "rb"); //尝试打开客户端请求的文件if(fp!NULL) //如果文件存在,则传送给客户端{while(…...
MySQL数据库干货_13—— MySQL查询数据
MySQL查询数据 SELECT基本查询 SELECT语句的功能 SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事: 列选择:能够使用 SELECT 语句的列选择功能选择表中的列,这些列是想 要用查询返回的。当查询时…...
Docker Consul概述及构建
Docker Consul概述及构建 一、Consul概述1.1、什么是Consul1.2、consul 容器服务更新与发现1.3、服务注册与发现的含义1.4、consul-template概述1.5、registrator的作用 二、consul部署2.1、环境配置2.2、在主节点上部署consul2.3 、配置容器服务自动加入nginx集群2.3.1、安装G…...
《Linux从练气到飞升》No.25 Linux中多线程概念
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
2021~2023年度长垣起重机博览会最佳产品彩页(修订中)
1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 3.英威腾 详细的变频器功能 4.杭州浙起 详尽的电动葫芦结构展示,电动葫芦参数展示 5.…...
OpenCV标定演示,及如何生成标定板图片
标定的程序在官方的源码里有, opencv-4.5.5\samples\cpp\tutorial_code\calib3d\camera_calibration 很多小白不知道怎么跑起来,这个也怪OpenCV官方,工作没做完善,其实的default.xml是要自己手动改的,输入的图片也要…...
python venv 虚拟环境使用
查看py版本python --version 创建虚拟环境 venvdemopython -m venv venvdemo 启动虚拟环境创建好虚拟环境后,当前目录会出现 venvdemo文件夹 cd envdemo\Scripts 执行 ./activate 文件 进入虚拟环境 关闭虚拟环境deactivate 如何查看Python虚拟环境位置python -c …...
useCallback和useMemo的区别?
文章目录 前言useCallbackuseMemouseCallback除了缓存回调函数还可以做什么操作?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:react.js 🐱👓博主在前端领域还有很多知识和技术需要掌握࿰…...
Angular组件生命周期详解
当 Angular 实例化组件类 并渲染组件视图及其子视图时,组件实例的生命周期就开始了。生命周期一直伴随着变更检测,Angular 会检查数据绑定属性何时发生变化,并按需更新视图和组件实例。当 Angular 销毁组件实例并从 DOM 中移除它渲染的模板时…...
notepad--性能优化完全指南:从基础调优到源码级优化
notepad--性能优化完全指南:从基础调优到源码级优化 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- notepa…...
终极指南:如何快速诊断与修复FanControl风扇识别问题
终极指南:如何快速诊断与修复FanControl风扇识别问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...
C语言完美演绎6-21
/* 范例:6-21 */#include<stdio.h> #include<conio.h>int main(){int n;printf("这是nn乘法表,请输入一值>");scanf("%d",&n);int i1;for(;i<n;) /* i从1到n次循环*/{int j1;for(;j<n;) /…...
告别重复编码:用autoclaw在快马平台一键生成数据模型类提升效率
最近在开发一个Web应用时,我又遇到了那个老问题:每次新建数据表后,都要手动编写对应的模型类代码。这种重复劳动不仅耗时,还容易因为手误导致字段类型不匹配等问题。直到发现了InsCode(快马)平台的autoclaw功能,我的开…...
PCIe C++代理实例化
为了能调用PCIe AVIP的C用户接口,先要在C仿真文件中对PCIe C代理做一个实例化声明。PCIe C代理负责两件事:从C仿真程序获得事务报文,并将其通过信号接口发送给BFM。从信号接口接收事务响应报文,并将其发送给C仿真程序。注意&#…...
提升嵌入式开发效率:用快马平台一键生成串口通信等常用模块代码
作为一名嵌入式开发者,我经常需要和串口通信打交道。无论是调试信息输出、设备间通信还是固件升级,UART都是最常用的外设之一。但每次新项目都要重新写一遍串口初始化、中断处理这些重复性代码,实在有点浪费时间。最近发现InsCode(快马)平台能…...
告别学术阅读障碍:重新定义PDF翻译体验
告别学术阅读障碍:重新定义PDF翻译体验 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI…...
4步构建企业级语音识别服务:开发者效率提升实战指南
4步构建企业级语音识别服务:开发者效率提升实战指南 【免费下载链接】whisper-asr-webservice OpenAI Whisper ASR Webservice API 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-asr-webservice 在数字化转型加速的今天,如何将语音信息高…...
科哥版HeyGem实战应用:企业内训播报,文字转语音再转数字人全流程
科哥版HeyGem实战应用:企业内训播报,文字转语音再转数字人全流程 1. 企业内训数字人播报的价值与痛点 在当今快节奏的商业环境中,企业内训面临着内容更新频繁、制作周期紧张、人力成本高昂等挑战。传统的内训视频制作需要协调讲师时间、租赁…...
工业 AI Agent 落地全解:制造业智能化转型的技术架构与场景实践
2025 年被行业称为 AI Agent 元年,Gartner 将 Agentic AI 列为 2025 年顶级技术趋势首位。在智能制造加速推进的背景下,AI Agent 技术正成为破解制造业 AI 落地难、价值转化慢的核心抓手,实现从技术 Demo 到产线落地的跨越,真正融…...
