所谓数据查询,是用一个或多个关键字,查找出对应的数据。本节介绍单个关键字的个案查询和多个关键字的多条件查询。[大谦Excel,dqexcel点com]
个案查询
对于图6-6中处理前工作表中左侧的数据,给定右侧商品名称作为查询关键字,查找出该商品对应的销售数量和金额。思路是利用工作表数据,构造一个字典。将商品名称作为字典中键值对的键,将销售数量和金额组成的列表作为键值对的值。然后利用该字典和给定的商品名称,即可得到对应的销售数据。
1 import xlwings as xw
2 import os
3 root = os.getcwd()
4 app = xw.App(visible=True, add_book=False)
5 wb=app.books.open(root+r"/销售流水-个案查询.xlsx",read_only=False)
6 sht=wb.sheets.active
7 arr=sht.range("A2",sht.cells(sht.cells(1,"B").end("down").row,"C")).value
8 dicT={}
9 for i in range(len(arr)): #遍历每行数据
10 dicT[arr[i][0]]=[arr[i][1],arr[i][2]] #将名称作键,销售数据作值
11 for i in range(2,sht.cells(1,"F").end("down").row+1): #根据给定名称查询值
12 sht.cells(i,"G").value=dicT[sht.cells(i,"F").value]
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取数据到二维列表arr。
第8行创建空字典dicT。
第9-10行用一个for循环往字典dicT中添加键值对。将商品名称作为键值对的键,将销售数量和金额组成的列表作为键值对的值。
第11-12行使用一个for循环,根据F列给定的商品名称,将对应的销售数据,即该商品名称对应的字典的值逐个输出到G列和H列。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,个案查询结果如图6-6中处理后工作表中所示。
图6-6 个案查询
多条件查询
多条件查询有两个及两个以上的查询关键字。思路是将这两个或多个关键字作为字符串进行连接,组成一个字符串作为字典中键值对的键,对应的数据作为键值对的值,这样就将多条件查询问题转换为个案查询问题。
对于图6-7中处理前工作表中左侧的数据,给定右侧销售人员和商品名称作为查询关键字,查找出该商品对应的销售数量和金额。
1 import xlwings as xw
2 import os
3 root = os.getcwd()
4 app = xw.App(visible=True, add_book=False)
5 wb=app.books.open(root+r"/销售情况-多条件查询.xlsx",read_only=False)
6 sht=wb.sheets.active
7 arr=sht.range("A2",sht.cells(sht.cells(1,"A").end("down").row,"D")).value
8 dicT={}
9 for i in range(len(arr)): #遍历每行数据
10 dicT[str(arr[i][0])+str(arr[i][1])]=[arr[i][2],arr[i][3]] #多条件组合成键
11 for i in range(2,sht.cells(1,"F").end("down").row+1): #根据给定的多条件查询
12 sht.cells(i,"H").value=dicT[str(sht.cells(i,"F").value)+\
str(sht.cells(i,"G").value)] #写入查询到的值,即销售数据
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取数据到二维列表arr。
第8行创建空字典dicT。
第9-10行用一个for循环往字典dicT中添加键值对。将销售人员和商品名称拼接成的新字符串作为键值对的键,将销售数量和金额组成的列表作为键值对的值。
第11-12行使用一个for循环,根据F列给定的销售人员名称和G列给定的商品名称,将对应的销售数据,即销售人员和商品名称组成的键对应的字典的值逐个输出到H列和I列。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,多条件查询结果如图6-7中处理后工作表中所示。
图6-7 多条件查询