数据汇总

数据汇总是在数据查询的基础上,对查询结果进行一定的汇总处理。下面介绍出现次数汇总,数据求和汇总和多条件汇总等几种情况。[大谦Excel,dqexcel点com]

出现次数汇总

对于图6-8中处理前工作表中的数据,对各商品销售次数进行汇总。思路是利用工作表数据,构造一个字典。将商品名称作为字典中键值对的键,将销售次数作为键值对的值,即每次商品名称重复出现时,它作为键在字典中对应的值的大小加1。

code.python
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中处理后工作表中所示。

Document Image

图6-8 出现次数汇总

数据求和汇总

对于图6-9中处理前工作表中的数据,对各商品销售数量进行汇总。思路是利用工作表数据,构造一个字典。将商品名称作为字典中键值对的键,将销售数量作为键值对的值,即每次商品名称重复出现时,它作为键在字典中对应的值的大小在原来值的基础上进行累加。

code.python
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中处理后工作表中所示。

Document Image

图6-9 数据求和汇总

多条件汇总

对于图6-10中处理前工作表中的数据,针对销售人员和商品两个条件对销售数量进行汇总。思路是利用工作表数据,构造一个字典。将销售人员和商品名称组合成的字符串作为字典中键值对的键,将销售数量作为键值对的值,即每次键重复出现时,字典中对应的值在原来值的基础上进行累加。

code.python
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中处理后工作表中所示。

Document Image

图6-10 多条件汇总