数据汇总是在数据查询的基础上,对查询结果进行一定的汇总处理。下面介绍出现次数汇总,数据求和汇总和多条件汇总等几种情况。[大谦Excel,dqexcel点com]
出现次数汇总
对于图6-8中处理前工作表中的数据,对各商品销售次数进行汇总。思路是利用工作表数据,构造一个字典。将商品名称作为字典中键值对的键,将销售次数作为键值对的值,即每次商品名称重复出现时,它作为键在字典中对应的值的大小加1。
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("B2",sht.cells(sht.cells(1,"B").end("down").row-1,"B")).value
8 dicT={} #创建字典
9 for k in arr: #遍历每行商品名称
10 dicT[k]=0 #商品名称作键,值初始化为0
11 for st in arr: #遍历每行商品名称
12 dicT[st]=dicT[st]+1 #累加商品销售次数
13 sht.range("F1",sht.cells(len(dicT), "G")).options(dict).value=dicT #写入
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取商品名称数据到列表arr。
第8行创建空字典dicT。
第9-10行用一个for循环往字典dicT中添加键值对。将商品名称作为键值对的键,对应的值全为0。
第11-12行使用一个for循环,根据键,即商品名称的重复次数进行累加,作为对应键的新值。
第13行使用了xlwings包的选项功能将字典输出到指定位置。用range属性的参数指定输出区域的左上角单元格坐标和右下角单元格坐标,options属性的参数设置为dict,表示按字典写入到工作表指定区域。字典的键和值各放一列。关于xlwings包的选项功能,第4章有更详细的介绍,请参阅。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,出现次数汇总结果如图6-8中处理后工作表中所示。
图6-8 出现次数汇总
数据求和汇总
对于图6-9中处理前工作表中的数据,对各商品销售数量进行汇总。思路是利用工作表数据,构造一个字典。将商品名称作为字典中键值对的键,将销售数量作为键值对的值,即每次商品名称重复出现时,它作为键在字典中对应的值的大小在原来值的基础上进行累加。
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("B2",sht.cells(sht.cells(1,"B").end("down").row-1,"C")).value
8 dicT={} #创建字典
9 for i in range(len(arr)):
10 dicT[arr[i][0]]=0 #商品名称作为键,值初始化为0
11 for i in range(len(arr)):
12 dicT[arr[i][0]]=dicT[arr[i][0]]+arr[i][1] #销量累加作为值
13 sht.range("F1",sht.cells(len(dicT), "G")).options(dict).value=dicT
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取商品名称数据到列表arr。
第8行创建空字典dicT。
第9-10行用一个for循环往字典dicT中添加键值对。将商品名称作为键值对的键,对应的值全为0。
第11-12行使用一个for循环,根据键,即商品名称的对应的销量进行累加,作为对应键的新值。
第13行使用了xlwings包的选项功能将字典输出到指定位置。用range属性的参数指定输出区域的左上角单元格坐标和右下角单元格坐标,options属性的参数设置为dict,表示按字典写入到工作表指定区域。字典的键和值各放一列。关于xlwings包的选项功能,第4章有更详细的介绍,请参阅。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,数据求和汇总结果如图6-9中处理后工作表中所示。
图6-9 数据求和汇总
多条件汇总
对于图6-10中处理前工作表中的数据,针对销售人员和商品两个条件对销售数量进行汇总。思路是利用工作表数据,构造一个字典。将销售人员和商品名称组合成的字符串作为字典中键值对的键,将销售数量作为键值对的值,即每次键重复出现时,字典中对应的值在原来值的基础上进行累加。
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("B2",sht.cells(sht.cells(1,"B").end("down").row-1,"D")).value
8 dicT={} #创建字典
9 for i in range(len(arr)):
10 dicT[str(arr[i][0])+"&"+str(arr[i][1])]=0 #多条件组合成键,值初始化为0
11 for i in range(len(arr)):
12 dicT[str(arr[i][0])+"&"+str(arr[i][1])]= \
13 dicT[str(arr[i][0])+"&"+str(arr[i][1])]+arr[i][2] #累加销量作为值
14 i=0
15 for k in dicT.keys(): #对每个多条件组合成的键进行拆分,得到多条件
16 k2=k.split('&')
17 i+=1
18 sht.cells(i,6).value=k2 #在工作表中写入多条件
19 sht.cells(i,8).value=dicT[k] #在工作表中写入对应销量
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取B,C,D数据到二维列表arr。
第8行创建空字典dicT。
第9-10行用一个for循环往字典dicT中添加键值对。将销售人员和商品名称组合成的字符串作为键值对的键,对应的值都为0。销售人员和商品名称之间用"&"进行连接。
第11-13行使用一个for循环,对具有相同键的销售数量值进行累加。
第12-19行使用一个for循环,输出汇总结果。字典中各键因为是用销售人员和商品名称用"&"连接而成的,所以用字符串对象的split方法以"&"为间隔进行分割得到销售人员和商品名称,放在第6列和第7列。销量汇总数据放在第8列。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,多条件汇总结果如图6-10中处理后工作表中所示。
图6-10 多条件汇总