目录

一、题目

1、描述

2、展示

①原图

②效果图

​二、分析

1、创建工作簿对象以及工作表对象

2、获取数据

3、数据存储

4、数据处理

三、源码


一、题目

1、描述

从278张表中获取物料编号、物料描述以及批号批数量三个数据,将物料号一样的产品的数量进行相加,得到此物料号总的数量,然后按降序排列存入一个新表中

2、展示

①原图

②效果图

 二、分析

1、创建工作簿对象以及工作表对象

在练习了多个对excel的操作之后,总结出一个规律,就是不管是想怎么操作,最先要做的就是获取、创建工作簿对象以及获取、创建工作表对象;

因为不对原工作簿进行操作,所以要写入到了另一个工作簿中,写入到一个工作簿中时首先要先生成一个工作簿对象和工作表对象,才能进行写入,而写入的数据来源是源文件,所以要先获取到源文件工作簿对象和工作表对象;

wb = openpyxl.Workbook()#创建工作簿对象
ws = wb.active#创建工作表对象
ws.title = '汇总'#给工作表赋名字ws.append(['物料编号', '物料描述', '批号批数量'])#写入数据,此时传入的数据只能是列表或者元组all_wb = openpyxl.load_workbook('日领料单.xlsx')#获取工作簿对象
all_ws = all_wb.worksheets#获取工作表对象,因为一个工作簿中保存着很多工作表,所以此时的工作表对象存储着多个工作表对象的地址的元组

2、获取数据

获取的工作表对象存储的是多个工作表的地址,所以此时用遍历的in依次取出存储的对象表的地址;

工作表对象中存储的是表中每一行的对象地址,此时用同样的方法依次取到每个表中的每一行的地址;

然后再通过得到的每一行的对象去得到想要的列的对象,在通过获取对象值的方法去得到想要的值;

for w in all_ws:for row in range(4, w.max_row-3):

3、数据存储

因为不是简单的拿数据,而是要对数据做合并和排序的处理,所以拿出来的数据要进行存储;

因为每一次得到数据具有对应的关系,所以要用列表进行处理,将物料编号作为大字典的键,值为物料描述和批量数量构成的小字典,然后再将大字典添加到另一个字典中;

添加到字典中时,要进行去重以及批量数量的求和,因为字典的键是惟一的,而且可以通过字典的键去判断其是否已经存在,如果已经存在,则要进行的就是将批量数据的值进行求和,如果不存在则加入字典中;

for w in all_ws:for row in range(4, w.max_row-3):if w['K'+str(row)].value not in res.keys():res.update({w['K'+str(row)].value:{'物料描述':w['P'+str(row)].value,'批号批数量':int(w['N'+str(row)].value)}})else:res[w['K'+str(row)].value]['批号批数量'] += int(w['N'+str(row)].value)
li = list(res.items())

4、数据处理

在数据已经存储到字典中之后,还需要做的操作就是根据批量数量的值进行排序了,因为字典是无序的,所以要先将字典转为列表;先要将字典中的键和值通过方法给读出来,一个键值对保存在一个元组中,将元组转化为列表,然后对列表进行排序;

排序使用的是匿名函数lambda,因为存储时是大字典套中字典套小字典,而遍历的是大字典

,也就是将中字典中的键值对取出来存储到元组中,而中字典点中存储着小字典,所以元祖中存储的也有字典,而要进行排序的值为字典中的值,所以要通过字典的键去获取相对应数值

套的小字典也可以用列表代替,此时获取值是会简单一点

三、源码

import openpyxlwb = openpyxl.Workbook()
ws = wb.active
ws.title = '汇总'ws.append(['物料编号', '物料描述', '批号批数量'])# K4---物料编号(无重复) P4---物料描述(有重复)
# N4---批号批数量(累加) O4[-1]---产品型号(序号)# max_row-3---最大行
all_wb = openpyxl.load_workbook('日领料单.xlsx')
all_ws = all_wb.worksheets
res = {}
for w in all_ws:for row in range(4, w.max_row-3):if w['K'+str(row)].value not in res.keys():res.update({w['K'+str(row)].value:{'物料描述':w['P'+str(row)].value,'批号批数量':int(w['N'+str(row)].value)}})else:res[w['K'+str(row)].value]['批号批数量'] += int(w['N'+str(row)].value)
li = list(res.items())
print(li)
li.sort(key= lambda x:x[1]['批号批数量'], reverse=True)
for x in li:ws.append([x[0], x[1]['物料描述'], x[1]['批号批数量']])wb.save('demo.xlsx')

Python对excel操作——分类汇总278张Excel表中的数据相关推荐

  1. 使用sql语句将一张旧表中的数据取出并插入到另一张新表中(字段不对应),并将中文name转变为拼音存入到code中

    要求:将公司旧项目中一个表的数据取出,全部放入到新项目的表中,两张表的字段是不对应的,数据有3446条,一条一条改,效率太低,所有这里采用的是sql语句进行操作 参考语法链接:SQL INSERT I ...

  2. Fintech系列(三) -- python对excel操作模块汇总||推荐指数||用法示例

    python对excel操作模块汇总||推荐指数||用法示例 Working with Excel Files in Python 总览 读写Excel的python第三方开源模块 Excel写操作插 ...

  3. 什么是计算机嵌套分类汇总,excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法...

    excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法,我们在工作中会遇到很多文章,像excel嵌套分类汇总这类问题应该大家也都遇到过吧,今天这篇excel嵌套分类汇总 ...

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

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

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

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

  6. 【Apache POI】Excel操作(一):Excel本地写入基本操作的实现

    有人住高楼,有人在深沟,有人光万丈,有人一身锈:世人千万种,浮云莫去求,斯人若彩虹,遇上方知有. 有目录,不迷路 前言 前期准备 POI基本介绍 Excel简单介绍 Excel版本介绍 Excel基本 ...

  7. 【Apache POI】Excel操作(六):Excel计算公式的读取和使用

    此后如竟没有炬火,我便是唯一的光. 文章目录 前言 Excel准备 计算公式读取 直接读取 屠龙秘技 再直接读取 再通过计算公式读取 完整代码 往期回顾 前言 在上期:[Apache POI]Exce ...

  8. 【Apache POI】Excel操作(八):Excel工具类的封装(终极版)

    恋爱最珍贵的纪念品,从来就不是那些你送我的手表和项链,甚至也不是那些甜蜜的短信和合照.是你留在我身上的,如同河流留给山川的,那些你对我造成的改变. 有目录,不迷路 前言 代码开整 环境准备 正式开整 ...

  9. 【唠叨两句】如何将一张树型结构的Excel表格中的数据导入到多张数据库表中...

    小弟昨天遇到一个相对比较棘手的问题,就像标题说的那样.如何将一张树型结构的Excel表格中的数据导入到多张数据库表中,在现实中实际是七张数据库表,这七张表之间有着有着相对比较复杂的主外键关系,对于我这 ...

最新文章

  1. [k8s] 第六章 Pod控制器详解(Controller-manager)
  2. python能够处理的最大整数是多少_python中能输出的最大整数位是多少
  3. Python 搜狗站长平台批量添加域名+批量提交链接 过验证码 IP限制
  4. 杭电1978java实现
  5. 解决:AttributeError: module 'pygal' has no attribute 'Worldmap' 问题
  6. dmsetup remove_all 这命令干啥的_分一个小知识,服务器上的一个解压与压缩文件的命令....
  7. 大数据学习笔记42:Hive - 分桶表
  8. Linux 零拷贝方案
  9. 用matlab抽样定理验证,用MATLAB验证时域抽样定理
  10. Spring之RMI 远程方法调用 (Remote Method Invocation)
  11. python中的作用域_python中作用域
  12. 裸看美剧必备英文词汇
  13. Houdini13:合成
  14. Invisible character on env file, cause programe abort abnormally
  15. excel工具栏隐藏了怎么办_?Excel菜单栏中工具栏突然不见了,怎么办?
  16. IDEA环境下模块的右下角蓝色小方块缺失的解决方法
  17. 170617 逆向-CrackMe之024
  18. 第三章 区块链进阶 [18]
  19. 2006年中国互联网天使投资大会文字实录
  20. 笔记:sentinel整合feign报org.springframework.beans.factory.UnsatisfiedDependencyException问题

热门文章

  1. 在计算机中 最普遍的西文编码是,目前在计算机中最普遍采用的西文字符编码是...
  2. Oracle VM VirtualBox虚拟机上网配置-实现多台虚拟机局域网独立ip,可连接外网
  3. 彻底关闭WinRAR广告弹窗
  4. MATLAB人民币面额识别
  5. js-六爻排盘-六神
  6. postgresql易学堂_起卦方法需要多少克?_最准确的起卦方法
  7. 2010年企业级信息技术的九大应用
  8. Oracle查询前1个小时到后一个小时之间的数据
  9. 174.Jewels and Stones
  10. QMessageBox 调整大小