win32com操作wod 第十六 Style操作样式的避坑指南

Style接口很常用,用来为文字设置样式,有两点是一定要注意的。

Style接口的返回值类型

现在有一个文档,它的第一段是个标题,内容为:

一、探究性学习相关概念界定及特征

在文档中,它的样式已经被设置为了标题 1,现在我要获取该段落的样式,伪代码演示。

from win32com.client import Dispatch

client = Dispatch('Word.Application')
doc = client.Open('demo.doc')

p1 = doc.Paragraphs(1)

print(p1.Range.Style)
# >>>
# 标题 1

不要被print()打印出来的内容迷惑了,print()方法调用的是类的__str__方法,当类中不存在__str__方法,就会调用__repr__方法,这两个方法的返回值只是类实例的描述,要想获得返回值类型,得使用type(),演示:

type(p1.Range.Sytle)
# >>>
# 

没错,Style返回的是一个类实例,在做样式对比的时候,要记得这个点,否则下面的判断就会出问题:

p1.Range.Style == '样式 1'
# 永远返回False 类示例无法和字符串进行比较

要想比较,那就使用下面的两个方法:

p1.Range.Style() == '样式 1'
# 或
str(p1.Range.Style) == '样式 1'

设置样式的时机

设置样式的时机非常重要,现在要为上方的第一段落,设置字体为宋体,字号14,居中对齐,样式为标题 1,伪代码演示:

p1.Range.Font.Name = '宋体'
p1.Range.Font.Size = 14
p1.Alignment = 0
p1.Range.Style = '标题 1'

上面的代码能实现需求吗?

答案是:有可能失败

原因是:Style自带格式

假如本地文档客户端标题 1所内置的字体是黑体,那么它会覆p1.Range.Font.Name = '宋体',其他的如此类推。

在做复杂项目时,不容易记得这些细节,出现问题了也难以第一时间发现。

ok,今天就讲到这,要继续肝项目了,我拉了个win32com编程的交流群,想入群可加微信:yideng6618,备注:交流群。

你可能感兴趣的:(win32com操作word,python,win32com,python操作word)