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

003 使用字典拆分多个工作簿

此案例主要通过使用Python语言的字典,从而实现根据特定的分类原则将一个工作簿(的工作表数据)拆分成多个工作簿(的工作表数据)。当运行此案例的Python代码(A309.py文件)之后,将根据录取院校把“录取表.xlsx”文件的录取表数据拆分到各个录取院校工作簿(各个Excel文件)中,效果分别如图003-1和图003-2所示。

图003-1

图003-2

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

import openpyxl
#读取"录取表.xlsx"文件
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():
     #创建新工作簿(myNewBook)
     myNewBook=openpyxl.Workbook()
     myNewSheet=myNewBook.active
     #在新工作表(myNewSheet)中添加表头(录取院校、专业、考生姓名、总分)
     myNewSheet.append(myRange[2])
     #在新工作表(myNewSheet)中添加键名(录取院校)下的多个键值(考生)
     for myRow in myValue:
          myNewSheet.append(myRow)
     myNewSheet.title=myKey+'录取表'
     #保存拆分之后(各个录取院校)的工作簿(myNewBook),或者说保存各个Excel文件
     myPath='结果表-'+myKey+'录取表.xlsx'
     myNewBook.save(myPath)

在上面这段代码中,字典(myDict)的作用就是以“录取院校”作为键名,在该键名下添加键值(即添加录取院校录取的多个考生),从而实现对所有考生进行归类。在此案例中,当字典(myDict)添加了考生以后,其保存的考生内容如下:

    {'北京大学':[('北京大学','材料化学','李洪',738),('北京大学','材料化学','常金龙',718),('北
 京大学','材料化学','李科技',712),('北京大学','金融学','段成全',722)],'清华大学':[('清华
 大学','环境工程','易来江',727),('清华大学','车辆工程','张振中',740),('清华大学','车辆工程
','田彬',732),('清华大学','软件工程','陈吉文',718)],'浙江大学':[('浙江大学','生物医学','刘
 康华',695),('浙江大学','机械工程','辛国明',699),('浙江大学','机械工程','李建平',696),('浙江
 大学','生物医学','黄明会',703),('浙江大学','生物医学','张华康',692)],'武汉大学':[('武汉大学
','口腔医学','杜建国',701),('武汉大学','口腔医学','何友大',692),('武汉大学','城乡规划学','
 万冬',701)]}

在创建多个工作簿时,则根据键名(录取院校)在每个工作簿的活动工作表中直接添加该键名(录取院校)的所有键值(即录取院校录取的多个考生),最后将每个工作簿保存为Excel文件。在此案例中,myDict[myRow[0]]=[myRow]也可以写成myDict.update({myRow[0]:[myRow]})。

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