当前位置: 首页 > news >正文

如何在java中使用 Excel 动态函数生成依赖列表

前言

在Excel 中,依赖列表或级联下拉列表表示两个或多个列表,其中一个列表的项根据另一个列表而变化。依赖列表通常用于Excel的业务报告,例如学术记分卡中的【班级-学生】列表、区域销售报告中的【区域-国家/地区】列表、人口仪表板中的【年份-区域】列表以及生产摘要报告中的【单位-行-产品】列表等等。

在本博客中,小编将为大家介绍如何借助葡萄城公司的Java API 组件GrapeCity Documents for Excel (以下简称GcExcel)和动态数组函数 UNIQUE、CHOOSECOLS 和 FILTER 以编程方式创建主列表和依赖下拉列表。

背景需求

下图是一张某公司的客户订单表原始数据:
在这里插入图片描述

现在为了将这些数据按照人名分类进行查阅,小编需要制作两个下拉列表(客户姓名和订单ID),同时需要满足订单ID的值是与客户姓名相关的,然后最下面显示的是根据订单ID查询出来的订单详细信息,如下图所示:
在这里插入图片描述

使用 GcExcel实现的步骤

步骤 1 - 工作簿初始化

使用 GcExcel API,第一步是初始化 Workbook 的实例。然后,可以根据业务需求选择打开现有 Excel 文档或创建新工作簿。在此博客中,小编将使用带有 IWorkbook 接口的 API 加载包含客户订单历史记录的现有 Excel 文档,如下所示:

Workbook workbook = new Workbook();
workbook.open("E:\\download\\smartdependentlist\\CustomerOrderHistory.xlsx");

步骤 2 - 获取工作表

接下来,小编需要获取用于创建所需报告的工作表。使用 GcExcel,可以使用 IWorkbook 界面中的 API 获取工作表。如下所示:

IWorksheet worksheet;
worksheet = workbook.getWorksheets().get(0);

步骤 3 - 获取客户名称的唯一列表(用于主下拉列表)

初始化工作簿后,需要获取添加到报表中“选择客户名称”部分的主下拉列表的唯一客户名称列表,并对所需的客户名称数据范围使用 UNIQUE 函数。使用 GcExcel,可以使用带有 IWorksheet 接口的 API 获取单元格或单元格区域,并使用 IRange 接口的 API 为其设置动态公式,如下所示:

IWorksheet worksheet;
worksheet = workbook.getWorksheets().get(0);

显示效果如下所示:
在这里插入图片描述

步骤 4 - 创建主下拉列表

获得客户名称列表后,将其用作为客户姓名下拉列表的数据源。在此博客示例中,此主下拉列表在单元格 L3 中创建。 小编使用GcExcel的IRange 接口的 API 在某个范围内配置数据验证。使用 IValidation 接口的 API 为区域添加新的验证规则实例。选择 ValidationType.List 列表类型数据验证选项,并使用 UNIQUE 公式将公式设置为单元格,如下图所示:

IValidation customerNameList = worksheet.getRange("L3").getValidation();
customerNameList.add(ValidationType.List, ValidationAlertStyle.Stop, ValidationOperator.Equal, "=$T$3#", null);

需要注意的是,要获得动态数组函数的结果范围,单元格引用后跟一个**#**。
在这里插入图片描述

步骤 5 - 获取唯一 OrderID(订单ID) 列表(用于依赖下拉列表)

设置完主下拉列表后,需要获取在主下拉列表中客户名称的唯一 OrderID 列表。为此,需要再次选择工作表中的单元格(在此示例中,此单元格为 $V$2)。在此单元格中使用以下公式获取所需的 OrderID 列表。

=CHOOSECOLS(FILTER(Unique_Cus_Order_combo,CHOOSECOLS(Unique_Cus_Order_combo,2)=CustomerName),1
)

公式解析如下:

  1. 定义 CustomerName是指包含主下拉列表的单元格的值;在此示例中,它指的是 =$L$3
    在这里插入图片描述

  2. 定义的Unique_Cus_Order_combo是指订单 ID 和客户名称的唯一组合范围。它存储公式 =UNIQUE(data!$A$2:$B$2156),其中范围 A 和 B 分别包含 OrderID 和 Customer Names。

在这里插入图片描述

返回的数据部分如下图所示:
在这里插入图片描述

  1. 内部 CHOOSECOLS 函数提供由 Unique_Cus_Order_combo 表示的范围内的 Customer 名称列表,以便与 FILTER 函数中的 CustomerName 匹配。
    在这里插入图片描述

  2. FILTER函数从所选客户名称对应的Unique_Cus_Order_combo中筛选出数据,如下图所示:
    在这里插入图片描述

  3. 最后,外部 CHOOSECOLS 函数从筛选的范围内返回所需的 OrderID 列表,如下所示:
    在这里插入图片描述

使用 GcExcel 设置定义的名称和动态公式的代码如下:

workbook.getNames().add("CustomerName", "=$L$3");
workbook.getNames().add("Unique_Cus_Order_combo", "=UNIQUE(data!$A$2:$B$2156)");IRange rngUniqueOrderIds;
rngUniqueOrderIds = worksheet.getRange("V2"); //dummy rnage to get unique list of customer names
rngUniqueOrderIds.setFormula2("=CHOOSECOLS(FILTER(Unique_Cus_Order_combo, CHOOSECOLS(Unique_Cus_Order_combo,2)=CustomerName), 1)");

步骤 6 - 填充依赖下拉列表

获取唯一订单ID后,紧接着需要提取的列表填充 OrderID 下拉列表(在此示例中,它位于 L6)。为此,请添加类型列表的数据验证(与为主下拉列表添加的数据验证相同),并将其源值设置为包含上一步中公式的单元格值(即 =$V$2)前缀为 #。

IValidation orderIdList = worksheet.getRange("L6").getValidation();
orderIdList.add(ValidationType.List, ValidationAlertStyle.Stop, ValidationOperator.Equal, "=$v$2#", null);

步骤 7 - 将默认值设置为下拉列表并保存工作簿

最后,使用 IRange 接口的 API 将默认值设置为下拉列表,并使用 IWorkbook 接口的 API 保存工作簿,如下面的代码片段所示:

worksheet.getRange("L3").setValue("Paul Henriot");
worksheet.getRange("L6").setValue(10248);
workbook.save("E:\\download\\smartdependentlist\\CustomerOrderHistoryReport.xlsx");

生成的带有智能依赖列表的 Excel 文件如下图所示:
在这里插入图片描述

附上完整的代码工程文件:https://gitee.com/GrapeCity/gc-excel_-dynamic_functions

总结

以上就是使用Java生成依赖列表的全过程,如果您想了解更多信息,欢迎点击这里查看更多资料。

扩展链接:

轻松构建低代码工作流程:简化繁琐任务的利器

优化预算管理流程:Web端实现预算编制的利器

如何在.NET电子表格应用程序中创建流程图

相关文章:

如何在java中使用 Excel 动态函数生成依赖列表

前言 在Excel 中,依赖列表或级联下拉列表表示两个或多个列表,其中一个列表的项根据另一个列表而变化。依赖列表通常用于Excel的业务报告,例如学术记分卡中的【班级-学生】列表、区域销售报告中的【区域-国家/地区】列表、人口仪表板中的【年…...

07 MyBatis之高级映射 + 懒加载(延迟加载)+缓存

1. 高级映射 例如有两张表, 分别为班级表和学生表 自然, 一个班级对应多个学生 像这种数据 , 应该如果如何映射到Java的实体类上呢? 这就是高级映射解决的问题 以班级和学生为例子 , 因为一个班级对应多个学生 , 因此学生表中必定有一个班级编号字段cid 但我们在学生的实体…...

MT8791迅鲲900T联发科5G安卓核心板规格参数_MTK平台方案定制

MT8791安卓核心板是一款搭载了旗舰级配置的中端手机芯片。该核心板采用了八核CPU架构设计,但是升级了旗舰级的Arm Cortex-A78核心,两个大核主频最高可达2.4GHz。配备了Arm Mali-G68 GPU,通过Mali-G88的先进技术,图形处理性能大幅提…...

java:Java中的数组详解

目录 Java数组的定义和特点: Java数组的初始化和赋值 Java数组的常用操作 1. 遍历数组 2. 获取数组长度 3. 访问数组元素 4. 数组的拷贝 多维数组 数组的排序和查找 冒泡排序: 快速排序 : 二分查找: 数组的应用: Java数…...

Modern C++ std::visit从实践到原理

前言 std::visit 是 C17 中引入的一个模板函数,它用于对给定的 variant、union 类型或任何其他兼容的类型执行一个访问者操作。这个函数为多种可能类型的值提供了一种统一的访问机制。使用 std::visit,你可以编写更通用和灵活的代码,而无需关…...

谷歌gemma2b windows本地cpu gpu部署,pytorch框架,模型文件百度网盘下载

简介 谷歌DeepMind发布了Gemma,这是一系列灵感来自用于Gemini相同研究和技术的开放模型。开放模型适用于各种用例,这是谷歌非常明智的举措。有2B(在2T tokens上训练)和7B(在6T tokens上训练)模型,包括基础和指令调整版本。在8192个token的上下文长度上进行训练。允许商业使…...

数据结构-查找与排序

数据结构再往后就是比较零散的各种操作&#xff0c;查找与排序是其中最常出现的&#xff0c;今天来总结一下常用的查找与排序所用的方法 查找 顺序查找 最简单的查找方式&#xff0c;遍历&#xff0c;然后比较 bool search1(int *a,int n,int k){for (int i1;i<n;i){//遍…...

【前端素材】推荐优质后台管理系统Qovex平台模板(附源码)

一、需求分析 1、定义 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作&#xff0c;用于管理网站内容、用户权限、数据分析等。后台管理系统是网站或应用程序的控制中心&#xff0c;管理员可以通过后台系统进行各种管理…...

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的&#xff0c;这一点很可惜。因为在许多实际工程中&#xff0c;人们对信号在局部区域的特征是比较关心的&#xff0c;这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…...

Go语言调用身份证实名认证API方法-标准版身份证实名认证接口

翔云身份证实名认证接口具备高准确度的身份信息比对能力&#xff0c;包括姓名、身份证号码、人脸照片等信息的一致性验证&#xff0c;并能实时反馈验证结果。 以下是GO语言调用翔云身份实名认证API的代码&#xff1a; package mainimport ("fmt""bytes"&q…...

数据库增删改查

DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库用户、控制数…...

10.CSS3的calc函数

CSS3 的 calc 函数 经典真题 CSS 的计算属性知道吗&#xff1f; CSS3 中的 calc 函数 calc 是英文单词 calculate&#xff08;计算&#xff09;的缩写&#xff0c;是 CSS3 的一个新增的功能。 MDN 的解释为可以用在任何长度、数值、时间、角度、频率等处&#xff0c;语法如…...

echrts 全国地图、各省市地图json文件下载

DataV.GeoAtlas地理小工具系列...

如何使用1688.item_search_shop API获取阿里巴巴店铺商品信息

要使用1688的item_search_shop API获取阿里巴巴店铺的商品信息&#xff0c;你通常需要遵循以下步骤&#xff1a; 1. 注册并获取API密钥 首先&#xff0c;你需要在阿里巴巴开放平台&#xff08;如1688开放平台&#xff09;上注册一个开发者账号&#xff0c;并创建一个应用。创…...

PLC_博图系列☞基本指令“取反RLO”

PLC_博图系列☞基本指令“取反RLO” 文章目录 PLC_博图系列☞基本指令“取反RLO”背景介绍取反RLO说明示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 取反RLO 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专业的PLC…...

docker安装PostGIS扩展

去docker仓库查找你想要安装的镜像版本&#xff0c;并pull下来 我下载的版本&#xff1a; [rootlocalhost ~]# docker pull postgis/postgis:12-3.2运行容器 [rootlocalhost ~]# docker run --name postgis --privilegedtrue --restartalways -e POSTGRES_USER12345678 -e P…...

LabVIEW开发FPGA的高速并行视觉检测系统

LabVIEW开发FPGA的高速并行视觉检测系统 随着智能制造的发展&#xff0c;视觉检测在生产线中扮演着越来越重要的角色&#xff0c;尤其是在质量控制方面。传统的基于PLC的视觉检测系统受限于处理速度和准确性&#xff0c;难以满足当前生产需求的高速和高精度要求。为此&#xf…...

P5734 【深基6.例6】文字处理软件 - Java

题目描述 你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 00 个字符。需要支持以下操作&#xff1a; 1 str&#xff1a;后接插入&#xff0c;在文档后面插入字符串 strstr&#xff0c;并输出文档的字符串&#xff1b;2 a b&#xff…...

关于设备连接有人云的使用及modbus rtu协议,服务器端TCP调试设置

有人云调试 调试过程问题1. 关于modbus rtu协议,实质上有三种modbus基本原理modbus 格式2. 关于modbus crc16通信校验3. 关于在ubuntu阿里云服务器端,监听网络数据之调试mNetAssist4. 使用有人FAE传给的设置软件问题???之前的一个项目,再拿出来回顾下。 调试过程 先 要在有…...

开源图表库Echarts 简介与基本使用

ECharts 是一个使用 JavaScript 实现的开源可视化图表库&#xff0c;由百度团队开发。它提供了丰富的图表类型&#xff0c;如折线图、柱状图、饼图、地图、雷达图等&#xff0c;并且可以轻松地与其他前端框架和库集成。ECharts 的设计目的是为了满足复杂数据的可视化需求&#…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...