- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本课程《win32com操作word API精讲&项目实战》同步在B站、今日头条、视频号及本公众号发布。其中本公众号以发布文字教程为主.
今天是大年初二,一灯在此祝愿各位朋友兔年吉祥,达成所想.
本节课主要讲解使用 Range 操作段落格式中的 对齐 和 缩进 .
对齐和缩进属于段落格式, Range 并不能直接操作段落格式( Paragraph(s) 就可以),不过所幸的是, Range 中封装了一个 ParagraphFormat 的属性,它是一个独立接口,代表了段落的所有格式,通过它,则能实现 Range 操作段落格式.
对齐的操作非常简单,示例如下:
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 ,这是因为两个段落的对齐不一样,也就是这里所说的 混合格式 ,这种情形不止存在于对齐中,还有字体、字号以及页面设置等资源都会有.
一般开发中,我们需要逐个资源进行处理,以避免掉进 混合格式 的坑.
word编程接口中的缩进和客户端中设置面板的缩进选项是一一对应的,对齐的接口如下:
名称 | 接口 | 说明 |
---|---|---|
首行缩进/悬挂缩进 | CharacterUnitFirstLineIndent | 以字符为单位缩进 |
FirstLineIndent | 以磅值为单位缩进 | |
左缩进 | CharacterUnitLeftIndent | 以字符为单位缩进 |
LeftIndent | 以磅值为单位缩进 | |
右缩进 | CharacterUnitRightIndent | 以字符为单位缩进 |
RightIndent | 以磅值为单位缩进 |
首行缩进 和 悬挂缩进 共用接口,它们两个的操作效果是相反的,所以在客户端中缩进设置面板中,它们两个处于一个下拉框中,如下图:
文本之前 对应着左缩进的接口, 文本之后 对应着右缩进的接口.
同时,可以留意到,客户端提供了几个缩进的单位,这些单位最后都会被转换成磅值进行保存。在word编程的接口中,仅提供了两个单位的缩进接口,如上表中,带有 CharacterUnit 字样的接口属于按 字符 为单位进行缩进,反之按 磅值 为单位进行缩进.
代码演示(接着上面的代码) 。
# 对第一个段落执行首行缩进2字符
rng1.ParagraphFormat.CharacterUnitFirstLineIndent = 2
# 等效的做法 一个字号磅值等于一个字符
rng1.ParagraphFormat.FirstLineIndent = 当前段落字号磅值 * 2
磅值是所有缩进最终会保存的尺度单位,即无论使用字符设置还是厘米设置,最终会被计算成磅值保存到OLE对象中,这个保存的逻辑会引起一些小坑,当我们使用 字符 设置缩进时,系统中计算、保存磅值的同时,也会记录 字符 值,所以上述代码中,使用 字符 设置了首行缩进,我们既能通过 CharacterUnitFirstLineIndent 属性获取当前缩进的 字符值 ,也能通过 FirstLineIndent 属性获取 磅值 ,但反之却不行。一图胜千字,请看下图.
所以,当我们要取消缩进时:
暂时理解不了的话,自己敲一遍代码就能明白了.
悬挂缩进和首行缩进共用接口,前者使用 负数 赋值,后者使用 正数 赋值,这非常简单,伪代码演示即可.
# 悬挂缩进2字符
rng.ParagraphFormat.CharacterUnitFirstLineIndent = -2
至于左缩进和右缩进,使用方法、坑和首行缩进一模一样,请自行测试.
ok,本课内容就到这,下节课我们继续讲解 Range 的其他属性方法.
有疑问,可私信也可评论区交流哈.
最后此篇关于win32com操作wordAPI精讲第六集Range(四)对齐和缩进的文章就讲到这里了,如果你想了解更多关于win32com操作wordAPI精讲第六集Range(四)对齐和缩进的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!