本集主要讲解样式的操作,在官方的接口文档中,有Styles和Style两个接口。显而易见,Styles表示当前客户端中内置样式的集合,可以通过Document.Styles获得当前所有的内置样式,也可以使用索引的方式获得某个样式,如:Document.Styles(1),至于第一个索引到底是什么样式,这取决于你的客户端。
如果这是如此,是没办法操作文档的样式的,所以,样式接口的使用,并不能像Documents和Paragraphs接口那样使用。
样式接口的使用
Style是单个样式的对象接口,要操作样式,我们需要通过这个接口实现,它被封装在Range和Selection的接口中,作为属性。
所以,我们想获得某个段落的样式,必须先获取该段落,然后转换成Range(推荐),再通过Range使用Style,代码演示:
from win32com.client import Dispatch
client = Dispatch('kwps.Application')
doc = client.Documents.Open(r'd:/demo.doc')
# 获取第一个段落的样式
print(doc.Paragraphs(1).Range.Style)
>>>正文
# 设置样式
# 用法1
doc.Paragraphs(1).Range.Style = '标题 1'
# 用法2 Styles(1)是否为标题 1取决于你的客户端
doc.Paragraphs(1).Range.Style = doc.Styles(1)
样式避坑指南
有个需求,校验)Paragraphs(1)的样式是否为标题 1
# 错误的校验
doc.Paragraphs(1).Range.Style == '标题 1'
# 正确的校验
# 方法1
str(doc.Paragraphs(1).Range.Style) == '标题 1'
# 方法2
doc.Paragraphs(1).Range.Style() == '标题 1'
说明: doc.Paragraphs(1).Range.Style 返回的并不是字符串,而是Style的类实例,类实例当然不能和字符串做比较,Style内部实现了__call__方法,且该方法返回的是当前Range样式的字符串,所以使用doc.Paragraphs(1).Range.Style()等价于str(doc.Paragraphs(1).Range.Style)。
在前面我们学习过的接口中,Range也实现了__call__方法,所以doc.Range(1,10).Text也等价于doc.Range(1,0)()。
为了方便各位同学交流win32com和Python编程,我组织了一个群,请加wx:yideng6618,备注:交流群。