
使用Python开发微软的Excel通常需要使用第三方库,如xlrd、xlwt、xlutils、xlwings、win32com、openpyxl、pandas等,各种第三方库都有自己独特的功能和缺陷,因此在采用这些第三方库之前需要慎重考虑。
如:xlrd只能读取在Excel文件中的数据;xlwt只能在Excel文件中写入数据;xlutils虽然可以读写Excel文件的数据,但是它依赖于xlrd和xlwt;xlwings可以从Excel中调用Python,也可在Python中调用Excel;win32com可以独立读写Excel文件的数据;openpyxl也可以独立读写Excel文件的数据;pandas能够读写在Excel文件中的数据,但是它需要xlrd/xlwt/openpyxl/xlsxwriter等库的配合。
下面介绍两个Python辅助Excel实例,分别是将一个工作表拆分成多个工作表,和多个工作表拼接成一个工作表。
实例功能
此案例主要通过使用Python语言的字典,从而实现根据特定要求将一个工作表拆分成多个工作表。当运行此案例的Python代码(A305.py文件)之后,将把“录取表.xlsx”文件的录取表数据拆分到各个院校录取表中,如北京大学录取表、清华大学录取表等,代码运行前后的效果分别如图1和图2所示。

■ 图1

■ 图2
实现代码
import openpyxl
#根据“录取表.xlsx”文件创建工作簿(myBook)
myBook=openpyxl.load_workbook('录取表.xlsx')
mySheet=myBook['录取表']
#按行获取录取表(mySheet)的单元格数据(myRange)
myRange=list(mySheet.values)
#创建空白字典(myDict)
myDict={}
#从myRange的第4行开始循环(到最后一行)
for myRow in myRange[3:]:
#如果在字典(myDict)中存在某录取院校(myRow[0]),
#则直接在某录取院校(myRow[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')
代码说明
在上面这段代码中,myDict={}表示创建空白字典,Python语言的字典格式如下:d={key1:value1,key2:value2,…},在此案例中,最后形成的字典myDict的内容如下:

此案例的源文件是MyCode\A305\A305.py。

扫码观看讲解视频,限免三天
实例功能
此案例主要通过在for循环中使用Worksheet的append()方法,从而实现将多个工作表的数据拼接(合并)在一个工作表中。当运行此案例的Python代码(A304.py文件)之后,将把“录取表.xlsx”文件中的北京大学录取表、清华大学录取表、浙江大学录取表、武汉大学录取表等所有工作表的数据合并在新建工作表(录取表)中,代码运行前后的效果分别如图3和图4所示。

■ 图1

■ 图2
实现代码
import openpyxl
#根据“录取表.xlsx”文件创建工作簿(myBook)
myBook=openpyxl.load_workbook('录取表.xlsx')
#创建列表(myNewRows)
myNewRows=[]
#循环工作簿(myBook)的工作表(mySheet)
for mySheet in myBook:
#将工作表(mySheet)的考生数据添加到myNewRows
myNewRows+=[[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:]表示以切片的方式去掉每个工作表(如武汉大学录取表)的表头,该行代码也可以使用下列代码代替:myNewRows+=list(mySheet.values)[1:]。此外,需要说明的是:for mySheet in myBook等价于for mySheet in myBook.worksheets。
此案例的源文件是MyCode\A304\A304.py。
补充说明
阅读和使用本书案例要求读者具备一定的Python语言编程基础和操作Excel的基本常识,关于Python语法基础可以参考Python 基础语法教程(https://www.runoob.com/python/python-basic-syntax.html)。

扫码观看讲解视频,限免三天
源代码下载
关注微信公众号,后台回复关键词 “Python辅助Excevl021” 即可获得完整源代码。


参考书籍
《Python辅助Word+Excel:让办公更高效》
ISBN:9787302592464
作者:罗帅、罗斌
定价:99.8元


扫码优惠购书
347个典型办公场景
问题描述+解决方案+真实源码+效果截图
Python+Word+Excel实现办公自动化,
成倍提高办公效率
优化数据分析,让工作省点力!
告别重复劳动,蜕变职场精英!











