赞
踩
目录
日常工作中可能会遇到需要将多个表格的数据汇总到一张表格中,并对汇总表里面的数据进行汇总计算
T31.xlsx文件中有两个子表,分别是“一月账单”和“二月账单”
先需要将这两个表格中的数据汇总,存成一个新的文件,并对数据进行汇总计算
预计的结果表如下图所示
为了不做多余的表头写入,首先从第一个表格中提取出表头用列表存储好
- # 导入模块
- from openpyxl import load_workbook,Workbook
-
- # 打开表格
- wb=load_workbook('T31.xlsx')
- # 根据表名取表,先打开一月账单
- ws=wb['一月账单']
-
- # 获取表头
- list1=[]
- for i in ws[1]:
- list1.append(i.value)
创建一个新表,先将表头写入,因为要循环遍历多个表格但是表头只需要写入一次
- # 创建新表
- wb2=Workbook()
- ws2=wb2.active
-
- # 先将表头写入新表
- ws2.append(list1)
开始循环遍历“一月账单”表和“二月账单”表,并将数据添加进新表中
- # 遍历表格获取数据
- for row in ws.iter_rows(min_row=2,values_only=True):
- # 判断是否为空行,剔除掉空行
- if not all(i is None for i in row):
- ws2.append(row)
-
- # 根据表名取表,再打开二月账单
- ws_two=wb['二月账单']
- for row2 in ws_two.iter_rows(min_row=2,values_only=True):
- # 判断是否为空行,剔除掉空行
- if not all(i is None for i in row2):
- ws2.append(row2)
注意:不排除表格中存在中间有空白行的情况,所以需要将空白行进行剔除
语法解读:if not all(i is None for i in row):
for i in row,对row中的数据进行遍历,依次存储进i中,判断i是否是None类型,前置all判断所有的i都是否是None,如果是空白行,all(i is None for i in row)会返回一个True
这时候if not all(i is None for i in row): 相当于是 if not True:,所以if判断不会成立,不会执行下面的写入操作,于是就达到了一个剔除空白行的作用。
当两个表格的数据都汇总之后,对汇总表的数据进行计算
- sum=0
- n=2 # 定义n变量记录行数
- for row3 in ws2['B']:
- if row3.value=='消费金额':
- continue
- sum+=int(row3.value)
- n+=1
这里我定义一个变量sum用来存储最后的计算结果,变量n赋值初始值为2,因为是从第2行开始计算,for循环遍历新表中的B列,用if来跳过表头单元格,最后进行累加
因为最后写入总和的时候要在最大数据行的下一行进行写入,所以设置变量n来计算行数的变化
计算得到结果之后,需要将数据写入表格
- # 循环结束后,由n和字母B拼接出要写入计算结果的单元格坐标
- ws2['A'+str(n)].value='总和'
- ws2['B'+str(n)].value=sum
直接利用单元格坐标来写入对应的数据即可
当一个xlsx文件中存在很多个子表时,很显然,利用表名来获取表格对象是行不通的,工作量会异常庞大,这时候我们可以利用工作簿对象的sheetnames属性来获取出文件中所有的表名列表,然后循环遍历这个列表即可得到单个的表名
- sheet_list=wb.sheetnames
- for name in sheet_list:
- ws=wb[name]
累加计算数据结果的时候也可以按行来获取数据
- # 循环遍历新表,以行获取,对消费金额一列的数据进行求和
- sum=0 # 定义sum变量存储结果
- n=2 # 定义n变量记录行数
- for row3 in ws2.iter_rows(min_row=2):
- sum+=int(row3[1].value)
- n+=1
- # 导入模块
- from openpyxl import load_workbook,Workbook
-
- # 打开表格
- wb=load_workbook('T31.xlsx')
- # 根据表名取表,先打开一月账单
- ws=wb['一月账单']
- print(wb.sheetnames)
-
- # 获取表头
- list1=[]
- for i in ws[1]:
- list1.append(i.value)
-
- # 创建新表
- wb2=Workbook()
- ws2=wb2.active
-
- # 先将表头写入新表
- ws2.append(list1)
-
- # 遍历表格获取数据
- for row in ws.iter_rows(min_row=2,values_only=True):
- # 判断是否为空行,剔除掉空行
- if not all(i is None for i in row):
- ws2.append(row)
-
- # 根据表名取表,再打开二月账单
- ws_two=wb['二月账单']
- for row2 in ws_two.iter_rows(min_row=2,values_only=True):
- # 判断是否为空行,剔除掉空行
- if not all(i is None for i in row2):
- ws2.append(row2)
-
- # 循环遍历新表,以行获取,对消费金额一列的数据进行求和
- # sum=0 # 定义sum变量存储结果
- # n=2 # 定义n变量记录行数
- # for row3 in ws2.iter_rows(min_row=2):
- # sum+=int(row3[1].value)
- # n+=1
-
- sum=0
- n=2 # 定义n变量记录行数
- for row3 in ws2['B']:
- if row3.value=='消费金额':
- continue
- sum+=int(row3.value)
- n+=1
-
- # 循环结束后,由n和字母B拼接出要写入计算结果的单元格坐标
- ws2['A'+str(n)].value='总和'
- ws2['B'+str(n)].value=sum
-
-
- # 保存文件
- wb2.save('T32.xlsx')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。