查看原文
其他

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

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

本文作者:张馨月

文字编辑:孙晓玲

技术总编:张   邯


爬虫俱乐部将于2020年1月5日至11日湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~详细培训大纲及报名方式,请点击《爬虫俱乐部2020第一期Stata编程训练营开始报名啦!》或点击文末阅读原文呦~


新的一年开始,又到了大家高高立起flag的好时候。为了避免“立flag千篇一律,不打脸万里挑一”的局面再次发生,今天小编来和大家分享Python中一个强大的模块——win32com,来帮助大家实现office自动化办公,元气满满地开始工作~

win32com是MS为自动化提供的操作接口,可以直接调用OFFICE办公软件中的API函数,实现对Word、Excel、PPT文档的操作。今天我们就先来看看这个模块在Word当中的应用。

首先,我们先调用win32com并对Word程序进行初始化设置:


import win32comfrom win32com.client import Dispatchapp = Dispatch('Word.Application') app.Visible = 1 # 后台运行,不显示app.DisplayAlerts = 0  # 不警告
下面,小编就来向大家介绍三个简单的应用场景,帮大家代替繁复的手工操作:
1.设定特定格式文档

有时我们处理的文档对纸张大小、页眉页脚、段落格式有特定的要求,这时就可以调用win32com来进行设置:

(1)对页面进行初始设置:

#新建文档doc = app.Documents.Add()#设置纸张格式cm_to_points = 28.35doc.PageSetup.TopMargin = 3.3*cm_to_points # 上边距3.3厘米doc.PageSetup.BottomMargin = 3.3*cm_to_points # 下边距3.3厘米doc.PageSetup.LeftMargin = 2.8*cm_to_points # 左边距2.8厘米doc.PageSetup.RightMargin = 2.6*cm_to_points # 右边距2.8厘米#设置页眉页脚app.ActiveWindow.ActivePane.View.SeekView = 9 #9 表示页眉;10 表示页脚app.Selection.ParagraphFormat.Alignment = 1app.Selection.Text = 'page1'app.ActiveWindow.ActivePane.View.SeekView = 0 # 释放焦点,返回主文档

(2)在Word中插入段落

#创建一个函数,用来输入特定格式的一段文字def para(text=''): p = doc.Paragraphs.Add() p.Range.Font.Name = '宋体' p.Range.Font.Size = 12 p.Range.ParagraphFormat.Alignment = 0 # 012分别代表居左/中/右 p.Range.ParagraphFormat.LineSpacing = 12 # 行间距 p.Range.InsertBefore(text) # 插入内容para(text='i love python')

运行上述代码,就能得到一个如图所示的Word文档:


2.文字批量替换

我们的文档里有时会存在一些重复出现的错误信息,这个时候,win32com也可以派上用场~

以一个最为简单的例子为例,我们想把下面这个Word里的“研一”改成“研二”:

可以在Python里进行如下操作:

doc=app.Documents.Open(r"C:\Users\asus\Desktop\example\a.docx")app.Selection.Find.ClearFormatting()app.Selection.Find.Replacement.ClearFormatting()app.Selection.Find.Execute('研一', False, False, False, False, False, True, 1, True,'研二', 2)doc.Save()
其中,‘研一’为查找目标,‘研二’为替换为的字符,其他几个布尔值的含义按顺序分别如下:是否区分大小写;是否全字匹配(完全匹配的单词,并非单词中的部分);是否使用通配符;是否同音;是否查找单词的各种形式;向文档尾部搜索;带格式的文本。
这样就可以完成对文本的替换:


3.将.doc文档保存为.docx格式:

Python的docx库是大家操作Word文件时经常用到的一个库,但它的缺陷是只能处理docx文档,而无法对doc格式的文件进行处理。因此我们可以使用win32com来解决这个问题:

from win32com import clientimport os#定义一个函数,用来把指定格式的文件放入一个列表def find_file(path, ext, file_list=[]): dir = os.listdir(path) for i in dir: i = os.path.join(path, i) #拼接文件路径, 将多个路径组合后返回 if os.path.isdir(i): #用于判断某一对象是否为目录 find_file(i, ext, file_list) else: if ext == os.path.splitext(i)[1]: file_list.append(i) return file_list#定义一个函数,把doc转化为docxdef doc_to_docx(path): if os.path.splitext(path)[1] == ".doc": word = client.Dispatch('Word.Application') #打开word。 doc = word.Documents.Open(path) # 打开目标路径下的文件 doc.SaveAs(os.path.splitext(path)[0]+".docx", 16) #转化为docx格式 doc.Close()        word.Quit()       #退出

比如说我们的文件夹里有这几个文件:

我们在运行上述函数之后执行下面这几步操作,就可以轻松保存成docx了~

dir_path = r"C:\Users\asus\Desktop\example" #批量转换文件夹ext = ".doc"file_list = find_file(dir_path, ext)for file in file_list:    doc_to_docx(file)

结果如图,是不是很方便呢?

后续,小编会分享win32com对Excel的操作,一起来期待一下吧~


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
圆蛋快乐
BvD最后一弹——宏观数据宝典
一招搞定并购数据
多图“预警”(二)

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

BvD数据库介绍之Oriana

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

多图“预警”(一)

Selenium的等待方式
一举拿下函数图像
BvD数据库介绍之Osiris
来!左边跟我一起画个龙在你右边画一道彩虹~
Selenium登录豆瓣
妙用正则表达式--Python中的re模块(二)
cngcode和cnaddress新鲜出炉!
数据可视化之地理图

“气功”研究哪家强

关于我们

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

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




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

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