Python辅助Word+Excel:让办公更高效
上QQ阅读APP看书,第一时间看更新

022 将多个工作表拼接成一个工作表

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

图022-1

图022-2

A304.py文件的Python代码如下:

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。