目录

1.前言

2.需求

3.处理思路

4.可优化模式

5.源代码


1.前言

日常工作中可能会遇到需要将多个表格的数据汇总到一张表格中,并对汇总表里面的数据进行汇总计算

2.需求

T31.xlsx文件中有两个子表,分别是“一月账单”和“二月账单”

先需要将这两个表格中的数据汇总,存成一个新的文件,并对数据进行汇总计算

一月账单

二月账单

预计的结果表如下图所示

汇总表

3.处理思路

为了不做多余的表头写入,首先从第一个表格中提取出表头用列表存储好

# 导入模块
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=='消费金额':continuesum+=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

直接利用单元格坐标来写入对应的数据即可

4.可优化模式

当一个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

5.源代码

# 导入模块
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+=1sum=0
n=2 # 定义n变量记录行数
for row3 in ws2['B']:if row3.value=='消费金额':continuesum+=int(row3.value)n+=1# 循环结束后,由n和字母B拼接出要写入计算结果的单元格坐标
ws2['A'+str(n)].value='总和'
ws2['B'+str(n)].value=sum# 保存文件
wb2.save('T32.xlsx')

openpyxl——多表合并以及数据汇总相关推荐

  1. 学习Python处理Excel 难度1级别 多表合并、数据透视表、拆分合并单元格并获得一维表

    #本代码要点:多表合并.数据透视表.拆分合并单元格并获得一维表 #主题:各门店合并,计算各店当月回店做服务2次+的客人数量 #EXCEL工作表:存在合并单元格 #备注: import pandas a ...

  2. Python 批量处理大学校运会报名 Excel 表格,多表整合、数据汇总及统计 实例

    Python 与 Excel 表格综合实例:处理校运会报名 Excel 表格,多表整合.数据汇总及统计实例 前言: 需求: 主要思路及实现代码: 1.先获取目标文件路径下的所有Excel文件: 2.读 ...

  3. EXCEL实现多个工作表的快速数据汇总分类

    这是对EXCEL数据透视表的应用,教程参考来自EXCEL HOME,这里附上我的全部练习过程和图片.本文中所用所有图片以及文字均为本人原创,但为尊重原作者,故还是打上了转载的标签.如需转载,还请标上本 ...

  4. Python提取多张excel表上的数据,合并汇总到一张新表

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于财会学习联盟,作者:我是刀哥啊 私信回复"资料" ...

  5. Python常见数据处理技术——数据的概览与清洗、多表合并与连接、数据的汇总

    目录 一.数据的概览与清洗 1.数值类型的判断和转换 2.冗余数据的判断和处理 3.缺失数据的判断与处理 二.多表合并与连接 1.合并函数concat 2.连接函数merge 三.数据的汇总 1.数据 ...

  6. Python对excel操作——分类汇总278张Excel表中的数据

    目录 一.题目 1.描述 2.展示 ①原图 ②效果图 ​二.分析 1.创建工作簿对象以及工作表对象 2.获取数据 3.数据存储 4.数据处理 三.源码 一.题目 1.描述 从278张表中获取物料编号. ...

  7. oracle两列合并成一列_POWER QUERY--一个工作簿内的多张工作表合并汇总

    如果要汇总的工作表是在同一个工作簿内,此时的汇总并不复杂,但要先弄清楚:这些工作表数据的汇总操作,是纯粹将数据堆积汇总到一张表,还是根据各张表之间的关联字段来进行汇总. 01 多张工作表的堆积汇总 此 ...

  8. 人名和成绩一起排序_不同工作表中的数据表排序各异,如何用Excel数据透视表汇总?...

    用数据透视表做分析的时候,有时源数据有好几张数据表,且分布在不同的地方.且因为维护源数据的人不同,数据表的行.列标题也未必固定不变. 那么问题来了,如果各个数据表的行标题排序各不相同,如何将它们合并到 ...

  9. Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet

    Python办公自动化实践1:从多个excel表中提取数据并汇总到一个工作表页中,表格,抽取,sheet 发表时间:2020-04-26 问题:从当前目录或子目录中查询符合条件的excel表格,并从这 ...

最新文章

  1. php验证mysql内数据_MySQL中数据类型的验证_MySQL
  2. 【蓝桥杯每日一练】 三色旗
  3. 嵌入式工作笔记0005---嵌入式发展和组成
  4. 一个传统的前端框架的布局
  5. 台式计算机如何封存,一种计算机用声卡封存装置的制作方法
  6. asp.net电子商务开发实战 视频 第三讲(门类列表)
  7. 计算机的表白隐藏功能,微信还有这个功能?隐藏代码还能表白!教你高级告白手段...
  8. java mysql utc时间_Java项目统一UTC时间方案
  9. 比360强力删除还暴力的删除文件(夹)方法
  10. 【Python实例】获取今日零点的datetime
  11. 写论文,这些工具让你少踩坑!
  12. Java获取ejabberd在线用户账号Jid
  13. 计算机组装大赛主题,DIY装机大赛策划书
  14. 【亡羊补牢】计算机网络灵魂之问 第3期 http状态码 302 504分别代表什么意思
  15. linux网络配置命令笔记,Linux笔记(九) 网络命令
  16. table标签的不规则布局
  17. 子曾经曰过,南风,已在创作的路上了
  18. Aspupload上传文件出错:Invalid registration key.
  19. 【话题讨论】-浅谈VR与AR
  20. 再也不见,雅虎被中国市场击败

热门文章

  1. 线扫相机DALSA-Advanced Control(输出设置)
  2. MFC消息分类及处理方式
  3. srs直播服务器的搭建 - 手把手教你怎么搭建属于自己的直播服务器~
  4. java监听oracle aq,JMS监听Oracle AQ
  5. 华硕 内存条 不同步_这颜值谁不爱呢?阿斯加特 洛极W3 RGB内存条 开箱评测 | 数字尾巴 分享美好数字生活...
  6. Oracle数据库使用序列my_seq来生成SUTD_ID主键值
  7. 拨打接听电话只有免提模式,无法切换听筒。默认免提模式,可以切换听筒。
  8. 在vmware workstation11上安装rhevh (吴志军投稿)
  9. ssh mysql 电子商城_电子商城系统的设计与实现(SSH,MySQL)(含录像)
  10. 如何有效地防止注册机