Excel多级联动下拉菜单设置

1.问题描述

现有数据表如下图所示:

该表中包括省、市、县三级目录。

现要将其整理成数据表模板,如下图所示:

要求制作成下拉菜单的形式,且每一级目录的下拉菜单列表要根据上一级目录的内容来确定。

如上图所示,只有在“省”级列表中选择了“北京市”,才能在“市”级列表中选择“北京市市辖区”,进而才能在“县区”级列表中选择“海淀区”“朝阳区”等内容。

2.主要思路

2.1第一步:数据字典整理

首先根据数据表中的内容,整理出多级数据字典,存放在Excel文件中不同的页面。如下图所示:

上图中分别整理出了省、市、县区三级字典。

其中一级字典(省)中,将数据项垂直排列即可;

二级字典(市)中,每行的第1个元素为上一级字典中的项,后续元素为该一级字典对应的二级字典中的项。如在二级字典(市)中,第1行中,第1个元素为“河南省”,后续元素分别为“开封市”“郑州市”。

三级字典(县区)以此类推。

2.2第二步:下拉菜单设置

根据前面制作的数据字典,在Excel中进行相关设置,制作出多级联动下拉菜单。

详细过程参见后文。

3.数据整理

(如果能够手动整理出上述的数据字典,则该部分可以略过。)

为了制作出所需的数据字典,使用Python对数据表进行处理,详细代码如下。

其中path为源文件路径,sheet_name为Excel文件内页面的名称,path_out为输出的字典文件路径。

import pandas as pd"""文件路径设置"""
path = r"D:\temp\data.xlsx"  # 源文件路径
sheet_name = "Sheet1"
path_out = r"D:\temp\data2.xlsx"  # 输出文件路径"""转换函数定义"""
"""用于将DataFrame格式转换为list(二维列表)格式"""
def frame2list(data):data_1 = data.iloc[:,0]  # 提取出DataFrame的第1列set_1 = set(data_1)  # 构建集合,用于将DataFrame第1列的数据去重if len(data.columns) == 1:return list(set_1)else:list_all = list()  # 初始化二维列表,用于存放DataFrame第1列每一项的处理结果for item in set_1:  # 依次处理DataFrame第1列每项数据data_temp = data[data.iloc[:,0]==item]  # 获取DataFrame中该项对应的所有行set_temp = set(data_temp.iloc[:,1])  # 将对应到的第2列中所有数据进行去重list_item = [item]  # 初始化一维列表,用于存放对应到的DataFrame第2列中的每项数据for item_temp in set_temp:  # 依次处理对应到的DataFrame第2列每项数据list_item.append(item_temp)  # 将该第2列数据加入一维列表list_all.append(list_item)  # 将一维列表加入二维列表return list_all"""主函数"""
if __name__ == "__main__":data = pd.read_excel(path, sheet_name=sheet_name, header=0)  # 读取Excel文件class_num = len(data.columns)  # 获取列数with pd.ExcelWriter(path_out) as f:  # 打开输出文件并写入for i in range(class_num):  # 逐列计算并写入输出文件dic_i = set()  # 初始化集合,用于消除重复值if i == 0:dic_i = set(data.iloc[:,0])else:dic_i = frame2list(data.iloc[:,i-1:i+1])df_i = pd.DataFrame(dic_i)  # 转换为DataFrame格式,便于输出为Excel文件df_i.to_excel(f, index=False, header=False, sheet_name=data.columns[i])  # 输出文件

该程序最终输出一个Excel文件,其中包含3个页面,分别对应3级数据字典。

如前文2.1节中的图所示。 

4.下拉菜单制作

4.1数据表准备

将上述生成的数据字典各页面与数据表模板放在一个Excel文件内,保存为不同的页面,如下图所示:

其中“数据表模板”页表示要制作出下拉菜单的数据表页面,如下图所示:

“省”“市”“县区”页分别为数据字典页。

4.2一级下拉菜单设置

对于一级菜单,选中所有需要填写一级目录数据的表格,在“数据”页点击“数据验证”。

进入“数据验证”对话框后,在“允许”项选择“序列”;

在“来源”项选择一级目录中的所有数据。

如:一级数据主要存放于Excel中“省”页面下的A1至A4格,则“来源”中填写“=省!$A1:$A4”。

其中“省”为Excel中存放以及数据的页面名称;“!”为页面与单元格之间的分隔符;“$A1:$A4”为数据在“省”页面中的分布范围。

注意在“来源”的输入框中,“A1”“A4”字母前面要有美元符号$,而数字前面不能有该符号。

如果手动选择字典中的单元格,默认字母和数字前面都会带上美元符号,所以需要手动取消。

返回“数据表模板”页面,看到一级目录已经设置完成。

4.3多级下拉联动菜单设置

在Excel中,对于二级、三级等目录,均进行如下设置:

4.3.1字典内容创建

对于二级目录,选中字典区域,然后点击“公式”栏中的“根据所选内容创建”。

对于三级目录,参照二级目录设置。

 在弹出的对话框中勾选“最左列”,确定。

 

4.3.2下拉菜单与字典的关联

以二级菜单为例。

在“数据表模板”页面中,选中所有需要填写二级数据表的单元格,点击“数据”页的“数据验证”。

在弹出的“数据验证”对话框中,“允许”一栏仍选择“序列”,“来源”一栏输入“=indirect($A2:$A4)” 。

其中indirect函数表示对上一级单元格的关联;

$A2:$A4表示该“数据表模板”页面中需要填写上一级目录的单元格范围。如上图单元格B2至B4内要填写“市”的内容,则indirect函数内要输入“省”的单元格范围($A2:$A4)。

注意这里的数字前面也不能加美元符号$。

点击“确定”后会提示“源当前包含错误”,点击“是”就可以。

回到“数据表模板”页面,可以看到二级联动下拉菜单也设置成功。

参照二级下拉菜单的设置,可以完成三级下拉菜单的设置。

 

最后可根据需要,将数据字典页面隐藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31950.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web基础:HTML快速入门

HTML基础语法 HTML(超文本标记语言) 是用于创建网页内容的 标记语言,通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本(Hypertext) 是一种通过 链接(Hyperlinks) 将不同文本、图像…

VSTO(C#)Excel开发2:Excel对象模型和基本操作

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

PostgreSQL学习笔记:PostgreSQL vs MySQL

PostgreSQL 和 MySQL 都是广泛使用的关系型数据库管理系统,它们有以下一些对比: 一、功能特性 1. 数据类型支持 PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、范围类型、几何类型等。对于复杂数据结构的存储和处理非…

Matlab:矩阵运算篇——矩阵

目录 1.定义 实例——创建矩阵 实例——创建复数矩阵 2.矩阵的生成 实例——M文件矩阵 2.利用文本创建 实例——创建生活用品矩阵 3.创建特殊矩阵 实例——生成特殊矩阵 4.矩阵元素的运算 1.矩阵元素的修改 实例——新矩阵的生成 2.矩阵的变维 实例——矩阵维度修…

从0到1入门Docker

一、快速入门 Docker run命令中的常见参数 -d:让容器后台运行--name:给容器命名(唯一)-e:环境变量-p:宿主机端口映射到容器内端口镜像名称结构:Repository :TAG(镜像名&…

Python的浮点数

在 Python 中,有四种内置数值类型,分别是整型整数类型(int)、布尔类型(bool)、浮点数类型(float)和复数类型(complex)。浮点数默认是双精度类型,占…

从零开始 | C语言基础刷题DAY1

❤个人主页:折枝寄北的博客 DAY1[2025.3.11] 1. 求两个数的较大值2.从键盘输入的两个数的大小关系3.一个整数的奇偶性,请判断4. 考试分数是否通过5.考试成绩是否完美,请判断 1. 求两个数的较大值 题目: 写一个函数求两个整数的较…

[pytest] 配置

这里写目录标题 PytestInitRun3. 根据命令行选项将不同的值传递给测试函数 Report1. 向测试报告标题添加信息2. 分析测试持续时间 pytest --durations33. 增量测试 - 测试步骤--junitxml{report}.xml1. testsuite1.1 在测试套件级别添加属性节点 record_testsuite_property 2. …

物联网商业模式

物联网商业模式是一种战略规划,它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于,它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中,这种商业模式通过利用实时数据来提供创新服务…

springboot432-基于SpringBoot的酒店管理系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

Manus AI:开启Agent元年的ChatGPT时刻(附赠资料)

1. Manus AI:全球首个通用Agent Manus AI 是全球首个通用人工智能代理,连接思想与行动,不仅思考,还能交付成果。Manus 擅长处理工作和生活中的各种任务,帮助用户完成一切。其核心理念是“less structure, more intell…

vscode接入DeepSeek 免费送2000 万 Tokens 解决DeepSeek无法充值问题

1. 在vscode中安装插件 Cline 2.打开硅基流动官网 3. 注册并登陆,邀请码 WpcqcXMs 4.登录后新建秘钥 5. 在vscode中配置cline (1) API Provider 选择 OpenAI Compatible ; (2) Base URL设置为 https://api.siliconflow.cn](https://api.siliconfl…

从零使用docker并安装部署mysql8.3.0容器

在开始使用docker到完成mysql的安装部署,中间有很多的坑等着 安装docker并配置 sudo yum install docker-ce 启动docker并设置开机启动项 sudo systemctl start docker sudo systemctl enable docker查看docker是否启动 sudo systemctl status docker 或者直接…

golang 静态库 Undefined symbol: __mingw_vfprintf

正常用golang编译一个静态库给 其他语言 调用,编译时报错 Error: Undefined symbol: __mingw_vfprintf 很是奇怪,之前用用golang写静态库成功过,编译也没问题,结果却是截然不同。 试了很多次,发现唯一的差别就是在 …

如何下载一些网上只提供了预览的pdf

有些网站上提供了pdf的预览,但是不提供下载入口 这时候用浏览器调出开发人员工具(F12),找Fetch/XHR这个选项,里看启动器中有pdf的那个文件,点选 它。 然后就能找到它的网址了,直接把这个网址选中&#xff…

力扣-数组-34 在排序数组中查找元素的第一个和最后一个位置

思路和时间复杂度 思路&#xff1a;先找到中间数&#xff0c;如果没找到就返回{-1&#xff0c;-1}&#xff0c;如果找到了就以当前节点为中点&#xff0c;向两边扩时间复杂度&#xff1a; 代码 class Solution { public:vector<int> searchRange(vector<int…

一二三应用开发平台——能力扩展:多数据源支持

背景 随着项目规模的扩大&#xff0c;单一数据源已无法满足复杂业务需求&#xff0c;多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件&#xff1a;开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…

NAFNet:Simple Baselines for Image Restoration

Abstract 近年来&#xff0c;图像复原技术取得了长足的进步&#xff0c;但现有的图像复原方法&#xff08;SOTA&#xff09;系统复杂度也在不断增加&#xff0c;不利于对各种方法的分析和比较。在本文中&#xff0c;我们提出了一种简单的基线&#xff0c;它超越了SOTA方法&…

python语言总结(持续更新)

本文主要是总结各函数&#xff0c;简单的函数不会给予示例&#xff0c;如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示&#xff0c;用以提示用户)输入函数 注释 # 单行注释符&…

基于springboot和spring-boot-starter-data-jpa快速操作mysql数据库

1、创建springboot项目 2、pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…