【python辅助excel】(3)
(二十一)将一个工作表拆分成多个工作表
# 导入openpyxl模块
import openpyxl# 读取“录取.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("录取表.xlsx")
mysheet = mybook['录取表']
# 按行获取录取表(mysheet)的单元格数据(myrange)
myrange =list(mysheet.values)
#创建空白字典
mydict={}
#从myrange的第四行开始循环到最后一行
for myrow in myrange[3:]:#如果在字典(mydict)中存在某录取院校(myrow[0])#则直接在录取院校(mtrow[0])中添加考生([myrow])if myrow[0] in mydict.keys():mydict[myrow[0]]+=[myrow]#否则创建新录取院校else:mydict[myrow[0]]=[myrow]
#循环字典(mydict)的成员
for mykey,myvalue in mydict.items():#根据mykey(录取院校)创建新工作表(mynewsheet)mynewsheet=mybook.create_sheet(mykey+'录取表')#在新工作表(mynewsheet)中添加表头(录取院校、专业、考生姓名、总分)mynewsheet.append(myrange[2])#在新工作表(mynewsheet)中添加录取院校(mykey)的多个考生(myvalue)for myrow in myvalue:mynewsheet.append(myrow)
#保存工作簿,即将拆分结果保存在"结果表-录取表.xlsx"文件中
mybook.save("结果表-录取表.xlsx")
本程序中,一个字典的键值对应的是一个列表,列表中有多个值以达到匹配多个的目的
(二十二)将多个工作表拼接成一个工作表
# 导入openpyxl模块
import openpyxl# 根据“录取.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("录取表.xlsx")
#创建列表(mynewrows)
mynewrows=[]
#循环工作簿(mybook)的工作表(mysheet)
for mysheet in mybook:#将工作表(mysheet)的考生数据添加到mynewrowsmynewrows+=[[mycell.value for mycell in myrow]for myrow in mysheet.rows][1:]
#创建新工作表(mynewsheet)即录取表
mynewsheet=mybook.create_sheet('录取表')
#设置新工作表(mynewsheet)的表头
mynewsheet.append(['录取院校','专业','考生姓名','总分'])
#在新工作表(mynewsheet)中添加所有考生
for mynewrow in mynewrows:mynewsheet.append(mynewrow)#保存工作簿,即将拼接多个工作表的结果保存为"结果表-录取表.xlsx"文件
mybook.save("结果表-录取表.xlsx")
mynewrows+=[[mycell.value for mycell in myrow]for myrow in mysheet.rows][1:]
表示以切片的方式去掉每个工作表(如xx大学录取表)的表头
该行代码也可以用下列代码替代:
mynewrows=list(mysheet.values)[1:]
此外for mysheet in mybook 等价于 for mysheet in mybook.worksheets
(二十三)使用列表操作符拼接两个工作表
# 导入openpyxl模块
import openpyxl# 根据“订单表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("订单表.xlsx", data_only=True)
mysheet1=mybook['已出库订单']
mysheet2=mybook['为出库订单']
#将已出库订单表复制成全部订单表
mysheet3=mybook.copy_worksheet(mysheet1)
mysheet3.title='全部订单表'
#删除全部订单表的行(第一行除外)
while mysheet3.max_row>1:mysheet3.delete_rows(2)
mylist3=list(mysheet1.values)[1:]
mylist2=list(mysheet2.values)[1:]
#拼接已出库订单表(即列表mylist3)和未出库订单表(即列表mylist2)的所有行
#mylist3.extend(mtlist2)
mylist3=mylist3+mylist2
#根据订单编号升序排列全部订单表(即拼接之后的列表mylist3)的行
mylist3=sorted(mylist3,key=lambda x:x[1])
#将全部订单表(即拼接之后的列表mylist3)的行添加到mysheet3
for myrow in mylist3:mysheet3.append(myrow)
# 保存工作簿,保存为"结果表-录取表.xlsx"文件
mybook.save("结果表-订单表.xlsx")
mylist3=mylist3+mylist2 也可以直接使用 mylist3.extend(mtlist2)
(二十四)使用列表推导式累加多个工作表
代码如下:
#导入openpyxl模块
import openpyxl
#根据“利润表.xlsx”文件创建工作簿
mybook=openpyxl.load_workbook('利润表.xlsx')#累加工作簿(mybook)的所有工作表的B5单元格数据
mysun=sum([mysheet['B5'].value for mysheet in mybook])#在工作簿(mybook)中新增一个全年利润表(mysheet2)
mysheet2=mybook.copy_worksheet(mybook.worksheets[0])
mysheet2.title='全年利润表'#在全变利润表(mysheet2)的对应单元格设置加数(合计)
mysheet2['B5'].value=mysum
mysheet2['B6'].value=mysum
mybook.save("结果表-利润表")
mysun=sum([mysheet['B5'].value for mysheet in mybook])
是一个列表推导式,表示逐个获取工作簿(mybook)的所有工作表(mysheet)的 B5 单元格的数据,并用 sun() 函数 累加数据
在这里 mysheet['B5'] 和 mysheet.cell(5,2)作用相同,均指同一单元格
结果如下:
(二十五)使用集合方法拼接两个工作表
代码如下:
# 导入openpyxl模块
import openpyxl
# 根据“订单表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("订单表.xlsx", data_only=True)
mysheet1=mybook['已出库订单']
mysheet2=mybook['未出库订单']
#将已出库订单表复制成全部订单表
mysheet3=mybook.copy_worksheet(mysheet1)
mysheet3.title='全部订单表'
#删除全部订单表的行(第一行除外)
while mysheet3.max_row>1:mysheet3.delete_rows(2)
#根据已出库订单表的行创建集合(myset1)
myset1=set(list(mysheet1.values)[1:])
#根据未出库订单表的行创建集合(myset2)
myset2=set(list(mysheet2.values)[1:])
#将myset1和myset2拼接成myset3,即生成全部订单表
myset3=myset1.union(myset2)#将全部订单表(即拼接之后的列表mylist3)的行添加到mysheet3
for myrow in myset3:mysheet3.append(myrow)
# 保存工作簿,保存为"结果表-录取表.xlsx"文件
mybook.save("结果表-订单表.xlsx")
结果和上面的拼接效果一样
union() 方法实现集合拼接
myset3 集合成员的排列顺序可能与他们在 myset1 和 myset2 中的排列顺序不一致,并且可能每次在拼接之后的排列顺序都不一致,因为集合的成员和排列顺序无关
(二十六)使用集合方法拼接多个工作表
代码如下:
# 导入openpyxl模块
import openpyxl
# 根据“录取表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("录取表.xlsx", data_only=True)
mysheet1=mybook['北京大学录取表']
mysheet2=mybook['清华大学录取表']
mysheet3=mybook['浙江大学录取表']
mysheet4=mybook['武汉大学录取表']
#将北京大学录取表(mysheet1)复制成(全部院校)录取表(mysheet5)
mysheet5=mybook.copy_worksheet(mysheet1)
mysheet3.title='录取表'
#删除录取表(mysheet5)的行(第一行除外)
while mysheet5.max_row>1:mysheet5.delete_rows(2)
#根据北京大学录取表(mysheet1)的行创建集合(myset1)
myset1=set(list(mysheet1.values)[1:])
#根据清华大学录取表(mysheet2)的行创建集合(myset2)
myset2=set(list(mysheet2.values)[1:])
#根据浙江大学录取表(mysheet3)的行创建集合(myset3)
myset3=set(list(mysheet3.values)[1:])
#根据武汉大学录取表(mysheet4)的行创建集合(myset4)
myset4=set(list(mysheet4.values)[1:])
#将myset1,myset2,myset3,myset4拼接成myset5,即生成总录取表
myset5=myset1.union(myset2,myset3,myset4)#根据集合(myset5)在(全部院校)录取表(mysheet5)中添加考生
for myrow in myset5:mysheet5.append(myrow)
# 保存工作簿,保存为"结果表-录取表.xlsx"文件
mybook.save("结果表-录取表.xlsx")
注意:union() 方法的参数可以有多个,即该方法可以拼接多个集合,参数(集合)之间使用逗 号分开即可
(二十七)使用集合方法筛选两个工作表
# 导入openpyxl模块
import openpyxl
# 根据“订单表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("订单表.xlsx", data_only=True)
mysheet1=mybook['全部订单表']
mysheet2=mybook['已出库订单表']#将全部订单表(mysheet1)复制成未出库订单表(mysheet3)
mysheet3=mybook.copy_worksheet(mysheet1)
mysheet3.title='未出库订单表'
#删除未出库订单表(mysheet3)的行(第一行除外)
while mysheet3.max_row>1:mysheet3.delete_rows(2)
mylist1=list(mysheet1.values)[1:]
mylist2=list(mysheet2.values)[1:]
#根据全部订单表的行(第一行除外)创建集合(myset1)
myset1=set(mylist1)
#根据已出库订单表的行(第一行除外)创建集合(myset2)
myset2=set(mylist2)#计算myset1和myset2两个集合的差集,即获得未出库名单
myset3=myset1.difference(myset2)#根据集合(myset3)的行数据
for myrow in myset3:mysheet3.append(myrow)
# 保存工作簿,保存为"结果表-订单表.xlsx"文件
mybook.save("结果表-订单表.xlsx")
上面是输出结果,下面是原始文件
myset3=myset1.difference(myset2)
表示 myset1 和 myset2 的差集,一般情况下,myset1代表全集,myset2代表子集
(二十八)使用对称差集方法筛选工作表
# 导入openpyxl模块
import openpyxl
# 根据“学员表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("学员表.xlsx", data_only=True)
mysheet1=mybook['Android学员表']
mysheet2=mybook['Java学员表']#将Android学员表复制成仅学一门课程的学员表(mysheet3)
mysheet3=mybook.copy_worksheet(mysheet1)
mysheet3.title='仅学一门课程的学员表'
#删除仅学一门课程的学员表(mysheet3)的行(第一行除外)
while mysheet3.max_row>1:mysheet3.delete_rows(2)
#根据Android学员表(mysheet1)的行(第一行除外)创建集合(myset1)
myset1=set(list(mysheet1.values)[1:])
#根据Java学员表(mysheet2)的行(第一行除外)创建集合(myset2)
myset2=set(list(mysheet2.values)[1:])
#计算myset1和myset2两个集合的对称差集(myset3),即获得两个工作表(集合)不同的行
myset3=myset1.symmetric_difference(myset2)#根据集合(myset3)的行数据
for myrow in myset3:mysheet3.append(myrow)
# 保存工作簿,保存为"结果表-学员表.xlsx"文件
mybook.save("结果表-学员表.xlsx")
结果:
myset3=myset1.symmetric_difference(myset2)
表示 myset1 和 myset2 的对称差集 myset3,对称差集定义为集合A和集合B中所有不属于A∩B的元素的集合
(二十九)使用列表关键字筛选两个工作表
# 导入openpyxl模块
import openpyxl
# 根据“订单表.xlsx”文件内容,并创建工作簿
mybook = openpyxl.load_workbook("订单表.xlsx", data_only=True)
mysheet1=mybook['全部订单表']
mysheet2=mybook['已出库订单表']#将全部订单表(mysheet1)复制成未出库订单表(mysheet3)
mysheet3=mybook.copy_worksheet(mysheet1)
mysheet3.title='未出库订单表'
#删除未出库订单表(mysheet3)的行(第一行除外)
while mysheet3.max_row>1:mysheet3.delete_rows(2)
mylist1=list(mysheet1.values)[1:]
mylist2=list(mysheet2.values)[1:]
#循环全部订单表(mylist1列表)的行myrow
for myrow in mylist1:#如果行(myrow)不在已出库订单表(mylist2列表)中if myrow not in mylist2:#则添加到未出库订单表中mysheet3.append(myrow)# 保存工作簿,保存为"结果表-订单表.xlsx"文件
mybook.save("结果表-订单表.xlsx")
if myrow not in mylist2
表示要求若行 (myrow) 包含多列,则该行所有列的数据必须与列表 (mylist2) 中的某行的所有列的数据完全匹配,该表达式才为 False
【python辅助excel】(3)相关推荐
- 【python辅助excel】(6)
(五十一)根据指定列数据降序排列工作表 # 导入openpyxl模块 import openpyxl # 根据"录取表.xlsx"文件内容,并打开工作簿 mybook = open ...
- 用python处理excel数据的优势-python处理excel的优势是什么
在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...
- python处理数据的优势-python处理excel的优势是什么
在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...
- python处理数据的优势-Python处理excel的优点
在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那么,大家为什么开始用Python了呢?Python辅助处理excel的 ...
- python处理excel的优势-SAS、R、SPSS、python、excel五大软件的比较优势分析
SAS.R.SPSS.python.excel五大软件的比较优势分析 一.SAS软件 SAS是全球最大的软件公司之一,是由美国NORTH CAROLINA州立大学1966年开发的统计分析软件.SAS把 ...
- 【Python自动化Excel】pandas处理Excel的拆分、合并
话说Excel数据表,分久必合.合久必分.Excel数据表的"分"与"合"是日常办公中常见的操作.手动操作并不困难,但数据量大了之后,重复性操作往往会令人崩溃. ...
- 辅助 Excel 的数据计算 add-ins
Excel 中遇到较复杂的运算,数据分析师常会用 add-ins 辅助解决.本文考察了一些常见的 add-ins,从部署难度.开发难度.流畅程度等方面进行深度对比,并着重考察了数据计算能力,esPro ...
- 五大数据分析软件对比:Python、Excel、R、SPSS、SAS
本文转载自:中国统计网 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macinto ...
- 用python实现excel 14个常用操作,用Python 操作 Excel,这篇文章别错过了!(超全总结)...
在之前的办公自动化系列文章中,我已经对Python操作Excel的几个常用库openpyxl.xlrd/xlwt.xlwings.xlsxwriter等进行了详细的讲解. 为了进一步带大家了解各个库的 ...
最新文章
- Keras图数据学习
- linux命令:du,df用法说明
- linux下安装c/c++环境(gcc/gcc+)
- spring源码刨析总结
- bootstrap-daterangepicker插件运用
- TCP/IP五层模型(五层因特网协议栈)||| OSI参考模型|||数据的封装与解封装
- linux web故障,网络故障处理与优化 linux服务器配置及故障排除 项目9 配置与管理web服务器.docx...
- 为什么.class文件查看不了_恕我直言,这可能是你见过最详细的class文件结构分析
- matlab均值滤波实现
- 20款电脑码字软件,网络作家实用软件珍藏,首推橙瓜码字
- 初学者之eclipse常用快捷键总结
- 电子商务计算机和英语作文,电子商务的优缺点英语作文_电子商务英语作文
- 黎曼的zeta函数(1)
- Riverbed助世界最大集装箱航运公司马士基实现数字化转型
- 飞秋官方下载 找了很久的
- 剑指 Offer 51-60
- 【C/C++】C++代码质量检核工具-cppcheck
- 【正则化;岭回归、lasso回归】(转载)
- [JavaWeb-04]HTML和CSS
- noip2016复赛官方初评纪中成绩