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所示。

 

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)]}

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

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉姆哥的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值