win32com操作word API精讲 第六集 Range(四)对齐和缩进

科技资讯 投稿 4900 0 评论

win32com操作word API精讲 第六集 Range(四)对齐和缩进

今天是大年初二,一灯在此祝愿各位朋友兔年吉祥,达成所想。

Range操作段落格式中的对齐缩进

1.ParagraphFormat属性

Range并不能直接操作段落格式(Paragraph(s就可以,不过所幸的是,Range中封装了一个ParagraphFormat的属性,它是一个独立接口,代表了段落的所有格式,通过它,则能实现Range操作段落格式。

2.对齐和混合格式的坑

from win32com.client import Dispatch

client = Dispatch('word.Application'
clinet.Visbile = 1

doc = client.Documents.Open(file_name
# 假设打开的文档中有两端文字

rng1.Range(0,0
rng1.MoveEnd(4,1

rng1.ParagraphFormat.Alignment
>>>0
Alignment用来返回或设置Range对象所在段落的对齐情况,返回int,其对照关系如下:
常量 对齐
0 左对齐
1 居中对齐
2 右对齐
3 两端对齐
4 分散对齐

坑需要避开:混合格式,我们模拟以下的情形。

对齐避坑指南

doc.Range(.ParagraphFormat.Alignment来获取全文档的对齐时,会返回9999999,这是因为两个段落的对齐不一样,也就是这里所说的混合格式,这种情形不止存在于对齐中,还有字体、字号以及页面设置等资源都会有。

混合格式的坑。

缩进

名称 接口 说明
首行缩进/悬挂缩进 CharacterUnitFirstLineIndent 以字符为单位缩进
FirstLineIndent 以磅值为单位缩进
左缩进 CharacterUnitLeftIndent 以字符为单位缩进
LeftIndent 以磅值为单位缩进
右缩进 CharacterUnitRightIndent 以字符为单位缩进
RightIndent 以磅值为单位缩进
首行缩进悬挂缩进共用接口,它们两个的操作效果是相反的,所以在客户端中缩进设置面板中,它们两个处于一个下拉框中,如下图:

文本之前对应着左缩进的接口,文本之后对应着右缩进的接口。

CharacterUnit字样的接口属于按字符为单位进行缩进,反之按磅值为单位进行缩进。


# 对第一个段落执行首行缩进2字符
rng1.ParagraphFormat.CharacterUnitFirstLineIndent = 2

# 等效的做法 一个字号磅值等于一个字符
rng1.ParagraphFormat.FirstLineIndent = 当前段落字号磅值 * 2

缩进避坑指南

磅值是所有缩进最终会保存的尺度单位,即无论使用字符设置还是厘米设置,最终会被计算成磅值保存到OLE对象中,这个保存的逻辑会引起一些小坑,当我们使用字符设置缩进时,系统中计算、保存磅值的同时,也会记录字符值,所以上述代码中,使用字符设置了首行缩进,我们既能通过CharacterUnitFirstLineIndent属性获取当前缩进的字符值,也能通过FirstLineIndent属性获取磅值,但反之却不行。一图胜千字,请看下图。

    如果当前使用的是磅值缩进,只需要按照磅值缩进接口赋值为0即可
  • 如果当前使用的是字符缩进,则需要先设置磅值缩进为0,再设置字符缩进为0方可取消。(因为这种情况它有两个缩进值,一为磅值,二为字符值)

暂时理解不了的话,自己敲一遍代码就能明白了。

悬挂缩进

负数赋值,后者使用正数赋值,这非常简单,伪代码演示即可。

# 悬挂缩进2字符
rng.ParagraphFormat.CharacterUnitFirstLineIndent = -2

至于左缩进和右缩进,使用方法、坑和首行缩进一模一样,请自行测试。

Range的其他属性方法。

有疑问,可私信也可评论区交流哈。

编程笔记 » win32com操作word API精讲 第六集 Range(四)对齐和缩进

赞同 (24) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽