from win32com.client import Dispatch
word_path = r'D:\KKCap\1.docx'
app = Dispatch("Word.Application")
doc = app.Documents.Open(word_path)
app.Visible = 1
app.DisplayAlerts = 0
s = app.Selection
# 查找Aaaa 第一个出现的位置
s.Find.Execute('Aaaa')
# 设置为一级标题
s.Style = -2
print(s.Style)
Styles的返回参数,标题1、标题2、标题3分别为-2、-3、-4,页眉为-32,标题为-63,其他见Styles文档
使用s.Find.Execeute方法时,如果用到任意一个位置的参数,就必须要写上前面的所有的参数,哪怕是注明参数也不行。下面分4种情况说明
1.查找15
s.Find.Execute(‘15’)
等同于
s.Find.Execute(FindText=‘15’)
这个只有一个参数,不存在省略参数的问题
2.使用正则查找1915或者2015这样的字符串(从当前位置查找到结尾)
s.Find.Execute(“??15”, False, False, True)
查找2015或者1915这样的字符串,? 代表任意一个字符
等同于s.Find.Execute(
FindText=“??15”, MatchCase=False,
MatchWholeWord=False, MatchWildcards=True
)
不能省略其他参数为
s.Find.Execute(FindText=“??15”, MatchWildcards=True)
也就是按照顺序,你用到了第4个参数,那么第1, 2, 3个参数都不能省略
3.比上一条增加了循环查找功能
s.Find.Execute(“??15”, False, False, True, False, False, True, 1)
查找2015或者1915这样的字符串,?代表任意一个字符
等同于s.Find.Execute(
FindText=“??15”, MatchCase=False,
MatchWholeWord=False, MatchWildcards=True,
MatchSoundsLike=False, MatchAllWordForms=False,
Forward=True, Wrap=1
)
Wrap不能使用True,只能使用1,这是因为这个参数在COM中为枚举类型,具体可查看文档
不能省略其他参数为
s.Find.Execute(FindText=“??15”, MatchWildcards=True, Forward=True, Wrap=1)
4.把15换成16
替换必须用到第11个参数,那么1到10的参数都要写上。
s.Find.Execute(“15”, False, False, False, False, False, True, 1, False, “16”, 2)
不能省略其他参数为
s.Find.Execute(FindText=“15”, ReplaceWith=“16”, Replace=2)
只所以不能省略参数的原因,可能是因为需要把python的参数数值,跨语言转换到C++的COM类型,沟通复杂导致的。
具体正则的语法,可以查看文末的参考文章,下面仅列出部分语法
- 代表任意多个字符
[x-x] 指定范围内的任意单个字符,如[a-c]pple代表apple, bpple, cpple。
^# 任意单数字,等于[0-9];
^$ 任意单字母,等于[a-zA-Z];
{n} 前一字符的个数为n
{m, n} 前一字符的个数最少为m,最多为n