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.pswp.cn/bicheng/73104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73104.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智駕技術全鏈條解析

智駕技術全鏈條解析(2025年最新版) 智駕技術涵蓋從環境感知到車輛控制的完整閉環,涉及硬件、算法、數據與系統集成等多個領域。以下結合行業最新進展(截至2025年3月)進行深度拆解: 一、感知技術&#xff1…

SpringMVC執行的流程

SpringMVC 基于 MVC 架構模式,核心流程時前端控制室 DispathcherServlet 統一調度,通過組件協作完成 http 的請求與響應。 對于 dispatchServlet 作為前端請求的控制器,全局的訪問點,首先將根據 URL 調用 HandlerMapping 獲取 Han…

Linux學習(十五)(故障排除(ICMP,Ping,Traceroute,網絡統計,數據包分析))

故障排除是任何 Linux 用戶或管理員的基本技能。這涉及識別和解決 Linux 系統中的問題。這些問題的范圍包括常見的系統錯誤、硬件或軟件問題、網絡連接問題以及系統資源的管理。Linux 中的故障排除過程通常涉及使用命令行工具、檢查系統和應用程序日志文件、了解系統進程&#…

存儲過程和自定義函數在銀行信貸業務中的應用(oracle)

數據校驗和清洗 例如,檢查客戶的年齡是否在合理范圍內,貸款金額是否符合規定的上下限等。 對于不符合規則的數據,可以進行清洗和修正。比如,將空值替換為默認值,或者對錯誤的數據進行糾正。 CREATE OR REPLACE PROC…

指令微調 (Instruction Tuning) 與 Prompt 工程

引言 預訓練語言模型 (PLMs) 在通用語言能力方面展現出強大的潛力。然而,如何有效地引導 PLMs 遵循人類指令, 并輸出符合人類意圖的響應, 成為釋放 PLMs 價值的關鍵挑戰。 指令微調 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…

【c++】反轉字符串

說明 將string類型的字符串本身反轉 用到庫&#xff1a;algorithm 示例代碼 #include <iostream> #include <string> #include <algorithm> using namespace std;int main() {string str "123";reverse(str.begin(), str.end());cout <<…

正則表達式(復習)

文章目錄 一、[]: 一個字符集合二、{}: 重復次數三、特殊符號四、(): 分組五、python代碼示例六、注意 正則表達式(regular expression)描述了一種字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個…

ARMV8的64位指令

一、介紹 ARMv8 體系結構最大的改變是增加了一個新的 64 位的指令集&#xff0c;這是早前 ARM 指令集 的有益補充和增強。它可以處理 64 位寬的寄存器和數據并且使用 64 位的指針來訪問內存。這 個新的指令集稱為 A64 指令集&#xff0c;運行在 AArch64 狀態。 ARMv8 兼容舊的…

線性代數之矩陣特征值與特征向量的數值求解方法

文章目錄 前言1. 冪迭代法&#xff08;Power Iteration&#xff09;冪法與反冪法求解矩陣特征值冪法求最大特征值編程實現補充說明 2. 逆冪迭代法&#xff08;Inverse Iteration&#xff09;移位反冪法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩陣理論推導編程…

VScode:運行程序停止后,頻繁出現終端進程被終止

VScode里面powershell被迫關閉 bug場景排查原因解決辦法 bug場景 系統&#xff1a;Windows IDE&#xff1a;Visual Studio Code 停止運行程序后&#xff0c;按向上箭頭想要執行上一步命令&#xff0c;忽然終端頁面強行關閉&#xff0c;并報錯如下&#xff1a; 終端進程 &quo…

[MERN] 使用 socket.io 實現即時通信功能

[MERN] 使用 socket.io 實現即時通信功能 效果實現如下&#xff1a; MERN-socket.io 實現即時聊天 Github 項目地址:https://github.com/GoldenaArcher/messenger-mern 項目使用了 MERN(MongoDB, Express, React, Node.js) socket.io 實現即時通信功能&#xff0c;并且使用了…

【菜鳥飛】Conda安裝部署與vscode的結合使用

介紹 Conda 是一個跨平臺的開源工具&#xff0c;用于管理軟件包和環境。最初由 Anaconda 公司開發&#xff0c;它的設計目標是支持數據科學和機器學習領域&#xff0c;但其功能不僅局限于此。 以下是 Conda 的核心特點&#xff1a; 包管理&#xff1a;安裝、更新、卸載各種庫…

《Android應用性能優化全解析:常見問題與解決方案》

目錄 一、UI卡頓/掉幀 二、內存泄漏&#xff08;Memory Leak&#xff09; 三、ANR&#xff08;Application Not Responding&#xff09; 四、列表滑動卡頓&#xff08;RecyclerView/ListView&#xff09; 五、冷啟動耗時過長 六、內存抖動&#xff08;Memory Churn&#x…

【MySQL是怎么運行的】0、名詞解釋

聚簇索引&#xff1a;聚簇索引和數據在一起&#xff0c;又名主鍵索引&#xff0c;是主鍵id構建的一顆B樹&#xff0c;非葉節點是主鍵id&#xff0c;葉子節點是真實數據。其他索引統稱二級索引&#xff0c;也稱為非聚簇索引。覆蓋索引&#xff1a;查找的數據就在索引樹上&#x…

深入解析 TCP 協議【真題】

傳輸控制協議&#xff08;TCP&#xff09;解析與題目解析 題目解析 關于傳輸控制協議&#xff08;TCP&#xff09;表述不正確的是&#xff1f; A. 主機尋址 B. 進程尋址 C. 流量控制 D. 差錯控制 TCP&#xff08;Transmission Control Protocol&#xff09;是面向連接、可靠傳…

單例模式的五種實現方式

1、餓漢式 ①實現&#xff1a;在類加載的時候就初始化實例 ②優點&#xff1a;線程安全 ③缺點&#xff1a;實例在類加載的時候創建&#xff0c;可能會浪費資源 //餓漢式 public class EagerSingleton{private EagerSingleton(){} //私有構造方法private static EagerSingle…

SwiftUI 讓視圖自適應高度的 6 種方法(四)

概覽 在 SwiftUI 的世界里&#xff0c;我們無數次都夢想著視圖可以自動根據布局上下文“因勢而變”?。大多數情況下&#xff0c;SwiftUI 會將每個視圖尺寸處理的井井有條&#xff0c;不過在某些時候我們還是得親力親為。 如上圖所示&#xff0c;無論頂部 TabView 容器里子視圖…

小程序SSL證書過期怎么辦?

SSL證書就像小程序的“安全鎖”&#xff0c;一旦過期&#xff0c;用戶訪問時會被提示“不安全”&#xff0c;輕則流失客戶&#xff0c;重則數據泄露&#xff01;作為企業負責人&#xff0c;如何快速解決證書過期問題&#xff1f;又該如何避免再次踩坑&#xff1f;這篇指南給你答…

ClickHouse優化技巧實戰指南:從原理到案例解析

目錄 ?ClickHouse優化核心思想?表結構設計優化?查詢性能優化技巧?數據寫入優化方案?系統配置調優實戰?高可用與集群優化?真實案例解析?總結與建議 1. ClickHouse優化核心思想 ClickHouse作為OLAP領域的明星引擎&#xff0c;其優化需遵循列式存儲特性&#xff0c;把握…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_02帶邊框和斑馬紋的固定表頭表格

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…