新的一年,效率满满~(下)
本文作者:朱巧利
文字编辑:孙晓玲
技术总编:张 邯
首先调用win32com并对Excel程序进行初始化设置。
import win32com
from win32com.client import Dispatch
xl = win32com.client.Dispatch('Excel.Application')#启动Excel
xl.Visible = False#是否打开Excel,True可见,False不可见
xl.DisplayAlerts = False#设置是否显示警告和消息框,True显示,False不显示
1.新建或打开已有工作簿
xlwb = xl.Workbooks.Add()#新建工作簿
xlwb.SaveAs(r"C:\Users\22241\空白表格.xlsx")
xlwb.Close()
首先我们先打开要进行操作的工作簿:
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:编辑受保护工作簿所需的密码
#打开某个sheet,1为第一个表单
sht = xlwb.Worksheets(1)
#获取某个sheet页的数据
cont = xlwb.Worksheets(1).UsedRange.Value
print(cont)
可以看到表单中的数据就以二维元组的形式展示了出来。
#获取指定单元格内容
content = sht.Cells(1,2).Value
data = 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 = 4
xlwb.Save()
xlwb.Close()#关闭工作簿
xl.Quit()#退出Excel
这两种形式均可对区域进行操作。
3.新建表单
我们也可以运用win32com来新建表单,完整程序如下:
import win32com.client
from win32com.client import Dispatch
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = False
xl.DisplayAlerts = False
xlwb = 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()
4.同时处理多个工作簿
大家可能会觉得处理一个表格使用Python多此一举,直接在Excel上进行不就OK了,那如果我们同时想要更改十个甚至一百个工作簿的背景色或者边框等呢?手动就非常耗时了。
举个简单的例子,小编电脑中有五个表格,我们一起来更改它们变量名称所在行的背景色和边框,结合循环,实现程序如下:
import os
pathlist=[]#空列表储存所有工作簿的名称
dir=r'C:\Users\22241\excel'
for root,dir,file in os.walk(dir):#遍历文件
for b in file:
pathlist.append(b)
import win32com.client
from win32com.client import Dispatch
xl = win32com.client.Dispatch('Excel.Application')
xl.Visible = False
xl.DisplayAlerts = False
for 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学起来吧~
自科基金项目信息爬取
rename group批量修改变量名
小命令,大不同——insobs插入新值
新的一年,效率满满~(上)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。