查看原文
其他

新的一年,效率满满~(下)

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:朱巧利

文字编辑:孙晓玲

技术总编:张   邯


在推文《新的一年,效率满满~(上)》中,我们已经介绍了win32com在word上的神奇用处,接下来小编就再给大家展示一下用win32com对Excel进行操作。

首先调用win32com并对Excel程序进行初始化设置。

import win32comfrom win32com.client import Dispatchxl = win32com.client.Dispatch('Excel.Application')#启动Excelxl.Visible = False#是否打开Excel,True可见,False不可见xl.DisplayAlerts = False#设置是否显示警告和消息框,True显示,False不显示

1.新建或打开已有工作簿

xlwb = xl.Workbooks.Add()#新建工作簿xlwb.SaveAs(r"C:\Users\22241\空白表格.xlsx")xlwb.Close()
这样就在当前路径下新建了一个空白的工作簿,并保存为空白表格.xlsx,当然我们也可以对其内容进行操作后再进行保存。不过通常我们是对已有的工作簿进行操作,下面小编就带大家利用win32com对表格进行一些操作。
这里小编用的是自己电脑中机构持股这个表格给大家进行演示。

首先我们先打开要进行操作的工作簿:

xlwb=xl.Workbooks.Open(Filename=r'C:\Users\22241\excel\机构持股.xlsx',ReadOnly=False,UpdateLinks=0,Format=None)

Workbooks.Open的参数含义如下:

Filename:要打开的excel的路径

ReadOnly:True为只读模式打开工作簿,无法进行编辑,False则可以编辑

UpdateLinks:指定更新文件中外部引用(链接)的方式

0:不更新任何引用

1:更新外部引用,但不更新远程引用

2:更新远程引用,但不更新外部引用

3:同时更新外部引用与远程引用

Format:由此参数指定分隔符,缺省情况下则使用当前分隔符 

除此之外,如果我们打开的工作簿受到保护即设定的有密码,那么我们需要再添加两个参数:

Password:打开受保护工作簿所需的密码

WriteResPassword:编辑受保护工作簿所需的密码

 

2.编辑excel
#打开某个sheet,1为第一个表单sht = xlwb.Worksheets(1)#获取某个sheet页的数据cont = xlwb.Worksheets(1).UsedRange.Valueprint(cont) 

可以看到表单中的数据就以二维元组的形式展示了出来。

#获取指定单元格内容content = sht.Cells(1,2).Valuedata = sht_data[1][2]

以上两种方法均可获得指定单元格如第一行第二列的内容。接下来我们来对单元格进行一些具体操作,并保存:

sht.Cells(1,1).Value = "股票代码"#更改单元格内容sht.Cells(1,2).Name = "微软雅黑"#字体类型sht.Cells(1,2).Font.Size = 10 #更改字体大小sht.Cells(1,2).Font.Bold = True #设置是否加粗sht.Cells(1,2).Interior.ColorIndex = 3 #表格背景色sht.Cells(1,1).BorderAround(1,4) #表格边框sht.Rows(3).RowHeight = 30#行高sht.Cells(1,1).HorizontalAlignment = -4131 #水平居中sht.Cells(1,1).VerticalAlignment = -4160 # 垂直居中sht.Rows(5).Delete()#删除行sht.Columns(3).Delete()#删除列xlwb.Save()#保存

更改后的表格如下:

如果想对某个区域进行一些操作,我们可以这样实现:
sht.Range(sht.Cells(5,1), sht.Cells(6, 3)).BorderAround(1,4)sht.Range('A7:C8').Interior.ColorIndex = 4xlwb.Save()xlwb.Close()#关闭工作簿xl.Quit()#退出Excel

这两种形式均可对区域进行操作。

 

3.新建表单

我们也可以运用win32com来新建表单,完整程序如下:

import win32com.clientfrom win32com.client import Dispatchxl = win32com.client.Dispatch('Excel.Application')xl.Visible = Falsexl.DisplayAlerts = Falsexlwb = xl.Workbooks.Open(Filename=r'C:\Users\22241\excel\机构持股.xlsx') location = xlwb.Worksheets(xlwb.Worksheets.Count) #统计已有表单数量sht = xlwb.Worksheets.Add(Before=None, After=location) #在最右侧新建表单sht.Name = '新表单1'#表单名称location = xlwb.Worksheets(1) #定位到第一个表单sht = xlwb.Worksheets.Add(Before=location)#在最左侧新建表单sht.Name = '新表单2'xlwb.Save()xlwb.Close()

可以看出在原表单的左右两侧各新建了一个sheet。

 

4.同时处理多个工作簿

大家可能会觉得处理一个表格使用Python多此一举,直接在Excel上进行不就OK了,那如果我们同时想要更改十个甚至一百个工作簿的背景色或者边框等呢?手动就非常耗时了。

举个简单的例子,小编电脑中有五个表格,我们一起来更改它们变量名称所在行的背景色和边框,结合循环,实现程序如下:

import ospathlist=[]#空列表储存所有工作簿的名称dir=r'C:\Users\22241\excel'for root,dir,file in os.walk(dir):#遍历文件 for b in file: pathlist.append(b) import win32com.clientfrom win32com.client import Dispatchxl = win32com.client.Dispatch('Excel.Application')xl.Visible = Falsexl.DisplayAlerts = Falsefor path in pathlist: xlwb = xl.Workbooks.Open(Filename=r'C:\Users\22241\excel\%s'%path,ReadOnly=False,UpdateLinks=0) sht = xlwb.Worksheets(1) sht.Range('A1:L1').BorderAround(1,4) #表格边框 sht.Range('A1:L1').Interior.ColorIndex = 4#背景色 xlwb.Save() xlwb.Close()xl.Quit()

 

通过一小段程序就批量更改了所有表格,是不是省去了很多时间呢!赶紧把win32com学起来吧~


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

自科基金项目信息爬取

rename group批量修改变量名

小命令,大不同——insobs插入新值

新的一年,效率满满~(上)

圆蛋快乐
BvD最后一弹——宏观数据宝典
一招搞定并购数据
多图“预警”(二)

您的圣诞礼物到了,请注意查收

BvD数据库介绍之Oriana

frlink:让连接更具“目的性”

多图“预警”(一)

Selenium的等待方式
一举拿下函数图像
BvD数据库介绍之Osiris
来!左边跟我一起画个龙在你右边画一道彩虹~
Selenium登录豆瓣

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存