使用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所示。
文章图片
文章图片
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]})。
推荐阅读
- 其他|计算机系统结构期末重点——数据表示与指令系统(计算机系统结构,李学干(第五版))(史上最详细)
- 脑机接口与脑电数据处理|移动机器人——移动机器人的发展
- python|【干货分享】推荐5个可以让你事半功倍的Python自动化脚本
- linux|Linux 受到开发者偏爱的 9 个理由!
- 薪资|图灵奖公布(高性能计算先驱、为超算铺平道路的Jack Dongarra获奖)
- 笔记|三年探索(一条自控、电信/科类学生的技术成长路线)
- peewee 查询结果使用字典数据类型
- 干货分享|接口测试系列之——接口安全测试
- 技术分享|【程序人生】做了低薪运营6年,靠什么转行拿下 20W 年薪()