首页 > 其他分享 >apache poi 实现下拉框级联

apache poi 实现下拉框级联

时间:2024-04-23 11:34:31浏览次数:24  
标签:级联 sheet int 管理器 poi apache formula 下拉框

场景需求

最近在项目中遇到个需求,需要提供一个批量导入的功能,常规做法就是提交excel模版文件,然后就是解析该文件读取数据,这时的模版文件在用户输入方面是没有限制的,用户输入啥就是啥,后台在解析的时候对值进行判断数据是否合法;

在现有的业务场景下,是可以进一步限制用户的输入的,这一次的需求数据互相关联的,我在客户输入的时候让客户只能选择性的输入起关联数据,其他一概不接收;使用级联下拉框来进行限制,只允许用户选择我提前准备好的数据,每一个下拉框选项和ID都是一一对应,用户在sheet1进行选择,sheet收集选项ID,最后上传的时候,只需要去读取sheet2即可;

效果预览

主要实现

核心主要是三个:下拉框,名称管理器,XLOOKUP函数

// 下拉框 
public void addDropDownBox(XSSFSheet sheet, String formula, int firstRow, int lastRow, int firstCol, int lastCol) {
	XSSFDataValidationHelper validationHelper = new XSSFDataValidationHelper(sheet);
	XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(3, formula);
	CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
	DataValidation validation = validationHelper.createValidation(constraint, addressList);
	validation.setSuppressDropDownArrow(true);
    validation.setShowErrorBox(true);
    sheet.addValidationData(validation);
}
// 名称管理器
XSSFName xssfName = workbook.createName();
xssfName.setNameName(grade.getName());
xssfName.setRefersToFormula(formula);
// 单元格写入XLOOKUP函数公式
String formula = "XLOOKUP(sheet1!A2,选项一!A:A,选项一!B:B)&"""
cell.setCellFormula(formula)

image

// 复制行填充公式
CellCopyPolicy cellCopyPolicy = new CellCopyPolicy();
cellCopyPolicy.setCopyCellFormula(true);
int flag = 1;
while (flag < lastRow){
	valSheet.copyRows(0,0,flag,cellCopyPolicy);
	flag ++;
}    

注意!级联选项框需要用到INDIREDT()函数
image

整体实现思路

  1. 准备sheet
    1. 准备主sheet
    2. 准备实现级联选择框需要用到的隐藏sheet
    3. 准备数据收集sheet
  2. 隐藏sheet赋值,期间要将需要的级联相关的数据放进名称管理器
  3. 主sheet添加下拉框
  4. 数据收集sheet的单元格添加XLOOPUP公式,复制行填充公式

隐藏sheet格式

image
image
image

名称管理器

image

标签:级联,sheet,int,管理器,poi,apache,formula,下拉框
From: https://www.cnblogs.com/luyifo/p/18152458

相关文章

  • web server apache tomcat11-16-mbean
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • 打印文件 -批量打印PDF/WORD/EXCEL/POWER POINT文件
     打印软件下载地址链接:https://pan.baidu.com/s/1IjRlNb2Krl8P_pCuIhbL-g提取码:gzkn--来自百度网盘超级会员V4的分享批量打印PDF/WORD/EXCEL/POWERPOINT文件|SW技巧网(peesky.com)   ......
  • 22.Postgresql的checkpoint功能
    PostgreSQL中的checkpoint是数据库管理系统(DBMS)中的一项重要机制,用于确保数据的一致性、可恢复性和性能管理。以下是关于PostgreSQLcheckpoint的详细解释:checkpoint的定义与作用定义:Checkpoint是一个在WAL(Write-AheadLog)序列中的点,此时所有数据文件已更新,反映了到该点为止......
  • EasyPoi 导出xlsx下拉列表过长问题解决
    问题描述:通过EasyPoi导出Excel带下拉框字段时,下拉框内值超过255时,会报错Stringliteralsinformulascan'tbebiggerthan255charactersASCII解决方案:额外创建sheet页去存储下拉框内数据,然后从这个sheet页中读取下拉框数据存到下拉列表中,最后需将额外创建的sheet隐藏......
  • web server apache tomcat11-14-CGI
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • 使用 apache pdfbox 去除水印
    需求学习cobol过程中,找了一本电子书,但是有水印。WPS可以擦除,但是需要开通会员。能不能用java程序去除水印呢?实现先查阅一些资料,开拓视野。第一步:安装 org.apache.pdfbox:pdfbox-app:3.0.2,这是一个可执行jar,执行后可弹出Swing图形用户界面,可导入pdf文件后可查看其内部结......
  • web server apache tomcat11-12-SSL/TLS Configuration
    前言整理这个官方翻译的系列,原因是网上大部分的tomcat版本比较旧,此版本为v11最新的版本。开源项目从零手写实现tomcatminicat别称【嗅虎】心有猛虎,轻嗅蔷薇。系列文章webserverapachetomcat11-01-官方文档入门介绍webserverapachetomcat11-02-setup启动web......
  • Devexpress GridControl下拉框实现联动
    实现效果1.先在设计界面绑定数据列1.点击设计器2.绑定数据列2.绑定GridView的FocusedRowChanged事件//定义两个下拉框_RIcmbtype:不良分类_RIcmbdefect:不良信息RepositoryItemComboBox_RIcmbtype=newRepositoryItemComboBox();RepositoryItemComboBox......
  • POI2011ROZ-Difference
    POI#Year2011#枚举#贪心枚举最后差最大的两个字符\(a,b\),将原串中\(a\rightarrow1,b\rightarrow-1\),其他标\(0\)原来的问题转化为强制包含\(1,-1\)的最大字段和问题,维护每个位置前最近的\(-1\),贪心取最大的//Author:xiaruizeconstintMOD=1000000007;const......
  • POI2011PRO-Programming Contest
    POI#Year2011#Dinic#网络流#贪心容易想到拆点的费用流做法,但是二分再拆点的时间复杂度是不可接受的考虑因为每个的时间\(r\)是定值,所以不可能出现做题个数差超过\(1\)的情况所以每一轮每个分配一个,用\(Dinic\)在推进一次,知道满流//Author:xiaruizeconstintN=......