首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

Excel 如何编程自定义多级菜单

发布网友

我来回答

2个回答

懂视网

要求:编写多级菜单

1.三级菜单

2.可依次进入各子菜单

3.菜单能够回到上一级

4.用到知识点:字典、列表、多层循环、函数


1)编写思路

编写思路参考下面GitHub链接中的流程图

作业/Day1_作业_多级菜单流程图.png


2)具体实现

 1 # -*- coding:utf-8 -*- 2 3 
 # Author:Chuixin Zeng 4 5 
 # 使用字典保存省份、市、县列表 6 
 # 这是一个多级的字典,可以通过for查询每一个级别的信息,级别:省份、市、区 7 8 
 _country_dict = { 9 '1.河南省': { 10  '1.郑州市': {'1.金水区': ['区号100', '邮编400000'], '2.中原区': ['区号101', '邮编400001'], '3.二七区': ['区号102', '邮编400002']}, 11  '2.洛阳市': {'1.老城区': ['区号200', '邮编200000'], '2.洛龙区': ['区号201', '邮编200001'], 
 '3.西工区': ['区号203', '邮编200002']}, 12  
 '3.信阳市': {'1.浉河区': ['区号300', '邮编300000'],
 '2.平桥区': ['区号301', '邮编300001'], '3.固始区': ['区号203', '邮编200002']} 13 }, 14 
 '2.河北省': { 15  '1.石家庄市': {'1.长安区': ['区号400', '邮编500000'], 
 '2.新华区': ['区号401', '邮编500001'], '3.桥西区': ['区号402', '邮编500002']}, 16  
 '2.保定市': {'1.竞秀区': ['区号500', '邮编600000'], '2.莲池区': ['区号501', '邮编600001'], 
 '3.满城区': ['区号503', '邮编600002']}, 17  '3.邯郸市': {'1.丛台区': ['区号600', '邮编700000'], '2.邯山区': ['区号601', '邮编700001'], '3.复兴区': ['区号602', '邮编700002']} 18 }, 19 '3.湖南省': { 20  '1.长沙市': {'1.芙蓉区': ['区号700', '邮编800000'], '2.岳麓区': ['区号701', '邮编800001'], '3.雨花区': ['区号702', '邮编800002']}, 21  '2.常德市': {'1.武陵区': ['区号800', '邮编900000'], '2.鼎城区': ['区号801', '邮编900001'], '3.未知区': ['区号803', '邮编900002']}, 22  '3.湘潭市': {'1.丛台区': ['区号900', '邮编110000'], '2.邯山区': ['区号901', '邮编110001'], '3.复兴区': ['区号902', '邮编110002']} 23 }, 24 '4.湖北省': { 25  '1.武汉市': {'1.江岸区': ['区号110', '邮编810000'], '2.江汉区': ['区号111', '邮编810001'], '3.汉阳区': ['区号112', '邮编810002']}, 26  '2.宜昌市': {'1.西陵区': ['区号120', '邮编910000'], '2.点军区': ['区号121', '邮编910001'], '3.夷陵区': ['区号123', '邮编910002']}, 27  '3.孝感市': {'1.孝南区': ['区号130', '邮编120000'], '2.孝感区': ['区号131', '邮编120001'], '3.未知区': ['区号132', '邮编120002']} 28 } 29 } 30 31 32 # 定义一个函数,用于将查询到的省份信息传递给此函数 33 34 def district(): 35 while True: 36  # 定义一个空列表,用于保存城市信息 37  cy = [] 38  # %s是处理对象的一种方法,是占位符,它的值来源于后面的% province省份的值,然后通过print打印出来 39  # province的值是在查询身份的语句里面定义的 40  print('%s 有以下城市:' % province) 41  # 通过for循环将用户选择的省份下面的城市列表放到_city中 42  for _city in sorted(_country_dict[province].keys()): 43  # 打印用户选择的省份下面的城市的列表 44  print(_city) 45  # 将用户选择的省份下面的城市列表附加保存到cy列表中 46  cy.append(_city) 47  # print(cy) 48  # 提供交互式界面,让用户输入要查询的城市编号 49  _city_number = input('请输入要查询的城市编号:(后退:b 退出:q)') 50  # 打印城市和区县列表的分隔符 51  print('---------------------------------------------------') 52  # 如果用户输入的编号是q,则退出查询 53  if _city_number == 'q': 54  print('已退出查询!') 55  exit() 56 
 # 如果用户输入的是b,则中断当前的判断,退回到上一级省份目录 57  elif _city_number == 'b': 58  break 59  else: 60  # 如果用户输入的是正确的编号,则从cy城市列表中获取到城市信息,放到city中 61  for city in cy: 62   # 判断用户输入的城市编号和cy列表中的城市编号是否匹配 63   if _city_number in city:    # 如果匹配,则将当前城市的名称保存到_citynumber变量中 65   _citynumber = city 66   # %s是处理对象的一种方法,是占位符,它的值来源于% _citynumber具体城市的值,然后通过print打印出来 67   print('%s 该城市有下列区县:' % _citynumber) 68 69   # 通过while循环,将具体城市下面的区县信息查出来 70   while True: 71    # 用于保存区县信息的列表 72    n = [] 73    # 通过for循环将用户选择的城市下面的区县列表放到_districts中 74    for _districts in sorted(_country_dict[province][_citynumber].keys()): 75    # 打印区县的名称信息,例如二七区 76    print(_districts) 77    # 将区县信息保存到n列表中 78    n.append(_districts) 79    # 提供交互式界面,让用户输入区县的查询行为 80    _phone_number = input('请输入要查询的区县的编号:(后退:b 退出:q)') 81    # # 打印区县和区县具体信息列表的分隔符 82    print('---------------------------------------------------') 83    # 如果用户输入了q,则结束查询 84    if _phone_number == 'q': 85    print('已结束查询!') 86    exit() 87    # 如果用户输入了b,则返回到上一级查询 88    elif _phone_number == 'b':     break # 跳出当前循环,回到上一级循环 90   
 else: 91    # 通过循环遍历从区县列表n中读取区县信息到pn中 92    for pn in n: 93     # 如果用户输入的区县编号和pn中的区县编号匹配 94     if _phone_number in pn: 95     # 则将具体匹配到的区县的名称保存到phone_number中 96     phone_number = pn 97     # %s的值来源于% _phone_number具体区县的值,然后通过print打印出来 98     print('%s 的信息如下:' % phone_number) 99     # 通过for循环将用户选择的具体的区县的列表中的信息放到p中100     for p in _country_dict[province][_citynumber][phone_number]:101      # 打印具体区县下面的邮政编码和区号信息102      print(p)103     # 打印查询分隔符104     print('---------------------------------------------------')105     # 通过交互式界面询问用户,是否继续查询106     _end_get = input('查询已完成,是否继续其他查询?(继续:Y 其他:结束)')107     # 如果用户输入的是大写的Y,则返回到上一级继续查询108     if _end_get == 'Y':109      break110     # 如果用户输入除了大写Y以外其他的值,则结束查询111     else:112      print('已结束查询!')113      exit()114    # 如果用户输入的区县编号有误,提示用户重新输入115    else:116     print('区县编号输入错误,请重新输入')117   
 # 第三个while True循环的退出118   
 break119 # 如果用户输入的城市编号不对,则提示用户重新输入120 
 else:121  print('城市编号输入有误,请重新输入!')122 
 # 第二个while True不设置中断条件,用户可以退回到当前的城市查询列表中123 124 while True:125 126 
 # 初始化空列表,用于保存省份信息127 c = []128 
 # 从国家字典中取第一级列表每一行的值,循环放到_country中129 
 for _country in sorted(_country_dict.keys()):130 
 # 逐行
输出国家字典里第一级列表每一行的值131 print (_country)132 '''133 打印效果134 1.河南省135 2.河北省136 3.湖南省137 4.湖北省138 '''139 # 将取到的第一级列表每一行的值追加放入c列表中140 c.append(_country)141 # print(c) # c列表打印的结果['1.河南省', '2.河北省', '3.湖南省', '4.湖北省']142 # 提供交互式界面给用户输入省份编号信息143 country_number = input("请输入要查询的省份编号:(退出:q)")144 # 打印省份和城市分割线145 print('---------------------------------------------------')146 # 如果用户输入的是q,则退出查询147 if country_number == 'q':148 print('已退出查询!')149 break150 151 # 如果没有输入q,则有两种情况:1)查询到身份列表,则把省份信息传递给district()函数做进一步查询;2)提示用户输入的编号有错误152 else:153 # 遍历c列表中的省份信息,保存到country中154 for country in c:155 if country_number in country:156 # 将遍历到的C列表的省份信息同用户输入的省份编号进行对比157 # 如果输入的编号和省份编号一致,则把country的值赋予给province,从而方便进一步查询特定省份下面的城市列表158 province = country159 # 如果符合上面的条件,则开始执行函数,此函数的目的是在现有查询的基础上进一步查询城市和区县信息160 district()161 # print(country_number) # 测试用户交互式输入信息162 break163 else:1 print("您输入的省份编号有误,请重新输入!")165 # 第一个while True不设置中断条件,用户可以退回到当前的身份查询列表中

3)Github笔记

第一天的笔记的地址是:

随堂练习

第一天作业的地址是:

作业


4)Readme.md文档

作业/Readme_多级菜单.md


热心网友

“EXCEL中实现多级联动的 下拉菜单 ”的操作步骤是:1、以Excel 2016为例,打开Excel 工作表 ;2、在F:H列以一级菜单为标题,二级菜单纵向排列的方式建表;3、选择一级菜单设置区域,在“数据”选项下的“ 数据验证 ”(Exce 2007以下版本的“ 数据有效性 ”)中,“设置”选项选择“序列”,来源选择F1:H1单元格,确定;
4、选择F:H列,在“公式”选项下的“根据所选内容创建”,在“选定区域创建名称”对话框中,勾选“首行”,按“确定”,完成创建名称;
5、选择二级菜单设置区域,在“数据”选项下的“ 数据有效性 ”中,“设置”选项选择“序列”,来源输入=INDIRECT(A2) 确定;
6、在一级菜单设置区域,点击下拉选项按钮,选择相应的菜单内容;
7、在二级菜单设置区域,点击选项按钮,会弹出与一级菜单相对应的二级菜单,供选择。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com