(二十一)将一个工作表拆分成多个工作表

# 导入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)相关推荐

  1. 【python辅助excel】(6)

    (五十一)根据指定列数据降序排列工作表 # 导入openpyxl模块 import openpyxl # 根据"录取表.xlsx"文件内容,并打开工作簿 mybook = open ...

  2. 用python处理excel数据的优势-python处理excel的优势是什么

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...

  3. python处理数据的优势-python处理excel的优势是什么

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那 么,大家为什么开始用Python了呢?Python辅助处理excel ...

  4. python处理数据的优势-Python处理excel的优点

    在我们工作中往往需要处理大量的数据,因此Excel在我们工作中是一个必不可少的工具,不过,近期很多人开始用Python处理数据,那么,大家为什么开始用Python了呢?Python辅助处理excel的 ...

  5. python处理excel的优势-SAS、R、SPSS、python、excel五大软件的比较优势分析

    SAS.R.SPSS.python.excel五大软件的比较优势分析 一.SAS软件 SAS是全球最大的软件公司之一,是由美国NORTH CAROLINA州立大学1966年开发的统计分析软件.SAS把 ...

  6. 【Python自动化Excel】pandas处理Excel的拆分、合并

    话说Excel数据表,分久必合.合久必分.Excel数据表的"分"与"合"是日常办公中常见的操作.手动操作并不困难,但数据量大了之后,重复性操作往往会令人崩溃. ...

  7. 辅助 Excel 的数据计算 add-ins

    Excel 中遇到较复杂的运算,数据分析师常会用 add-ins 辅助解决.本文考察了一些常见的 add-ins,从部署难度.开发难度.流畅程度等方面进行深度对比,并着重考察了数据计算能力,esPro ...

  8. 五大数据分析软件对比:Python、Excel、R、SPSS、SAS

    本文转载自:中国统计网 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一,是由Microsoft为Windows和Apple Macinto ...

  9. 用python实现excel 14个常用操作,用Python 操作 Excel,这篇文章别错过了!(超全总结)...

    在之前的办公自动化系列文章中,我已经对Python操作Excel的几个常用库openpyxl.xlrd/xlwt.xlwings.xlsxwriter等进行了详细的讲解. 为了进一步带大家了解各个库的 ...

最新文章

  1. Keras图数据学习
  2. linux命令:du,df用法说明
  3. linux下安装c/c++环境(gcc/gcc+)
  4. spring源码刨析总结
  5. bootstrap-daterangepicker插件运用
  6. TCP/IP五层模型(五层因特网协议栈)||| OSI参考模型|||数据的封装与解封装
  7. linux web故障,网络故障处理与优化 linux服务器配置及故障排除 项目9 配置与管理web服务器.docx...
  8. 为什么.class文件查看不了_恕我直言,这可能是你见过最详细的class文件结构分析
  9. matlab均值滤波实现
  10. 20款电脑码字软件,网络作家实用软件珍藏,首推橙瓜码字
  11. 初学者之eclipse常用快捷键总结
  12. 电子商务计算机和英语作文,电子商务的优缺点英语作文_电子商务英语作文
  13. 黎曼的zeta函数(1)
  14. Riverbed助世界最大集装箱航运公司马士基实现数字化转型
  15. 飞秋官方下载 找了很久的
  16. 剑指 Offer 51-60
  17. 【C/C++】C++代码质量检核工具-cppcheck
  18. 【正则化;岭回归、lasso回归】(转载)
  19. [JavaWeb-04]HTML和CSS
  20. noip2016复赛官方初评纪中成绩

热门文章

  1. 基于SSM网上商城购物系统的设计与实现
  2. 怎么办理高新技术企业认定高新技术企业认定流程
  3. C#-飞行棋小游戏的前识 067
  4. 小度机器人3D数字勋章盲盒发售!抽盲盒,赢奖金!参与合成得稀有!
  5. 安卓基本的POST请求工具类
  6. Origin 2018部分使用说明
  7. 文件夹加密解密,免安装,无注册
  8. CSDN博客中使用超链接
  9. 一张图让你了解软件开发流程
  10. 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解