技巧tips|Python实例|将Excel文件的工作簿内容拆分为多个Excel文件

使用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等库的配合。
下面介绍的Excel实例采用openpyxl库实现了将一个Excel文件的工作簿内容根据规则拆分到多个Excel文件的工作簿中,此实例的编写环境为PyCharm 2019.3.5 x64和Python 3.8。
1 实例功能 此实例主要通过使用Python语言的字典来实现根据特定的分类原则将一个工作簿(的工作表数据)拆分成多个工作簿(的工作表数据)。当运行此实例的Python代码(A309.py文件)之后,将根据录取院校把“录取表.xlsx”文件的录取表数据拆分到到各个录取院校工作簿(各个Excel文件)中,效果分别如图1和图2所示。
技巧tips|Python实例|将Excel文件的工作簿内容拆分为多个Excel文件
文章图片

技巧tips|Python实例|将Excel文件的工作簿内容拆分为多个Excel文件
文章图片

2 代码实现

#导入openpyxl库 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)

3 代码说明
上面这段代码在A309\A309.py文件中。在这段代码中,字典(myDict)的作用就是以“录取院校”作为键名,在该键名下添加键值(即添加录取院校录取的多个考生),从而实现对所有考生进行归类。在此案例中,当字典(myDict)添加了考生以后,其保存的考生内容如下:
{'北京大学': [('北京大学','材料化学','李洪',738),('北京大学','材料化学','常金龙',718),('北京大学','材料化学','李科技',712), ('北京大学','金融学','段成全', 722)],'清华大学': [('清华大学','环境工程','易来江',727),('清华大学','车辆工程','张振中',740),('清华大学','车辆工程','田彬',732),('清华大学','软件工程','陈吉文',718)],'浙江大学': [('浙江大学','生物医学','刘康华',695),('浙江大学','机械工程','辛国明',699),('浙江大学','机械工程','李建平',696),('浙江大学','生物医学', '黄明会',703),('浙江大学','生物医学','张华康',692)],'武汉大学':[('武汉大学','口腔医学','杜建国',701),('武汉大学','口腔医学','何友大',692),('武汉大学','城乡规划学','万冬',701)]}
【技巧tips|Python实例|将Excel文件的工作簿内容拆分为多个Excel文件】在创建多个工作簿时,则根据键名(录取院校)在每个工作簿的活动工作表中直接添加该键名(录取院校)的所有键值(即录取院校录取的多个考生),最后将每个工作簿保存为Excel文件。在此案例中,myDict[myRow[0]]=[myRow]也可以写成myDict.update({myRow[0]: [myRow]})。

    推荐阅读