本课程《win32com操作word API精讲&项目实战》同步在B站、今日头条、视频号及本公众号发布。其中本公众号以发布文字教程为主。

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

本节课主要讲解使用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,这是因为两个段落的对齐不一样,也就是这里所说的混合格式,这种情形不止存在于对齐中,还有字体、字号以及页面设置等资源都会有。

一般开发中,我们需要逐个资源进行处理,以避免掉进混合格式的坑。

缩进

word编程接口中的缩进和客户端中设置面板的缩进选项是一一对应的,对齐的接口如下:

名称 接口 说明
首行缩进/悬挂缩进 CharacterUnitFirstLineIndent 以字符为单位缩进
FirstLineIndent 以磅值为单位缩进
左缩进 CharacterUnitLeftIndent 以字符为单位缩进
LeftIndent 以磅值为单位缩进
右缩进 CharacterUnitRightIndent 以字符为单位缩进
RightIndent 以磅值为单位缩进

首行缩进悬挂缩进共用接口,它们两个的操作效果是相反的,所以在客户端中缩进设置面板中,它们两个处于一个下拉框中,如下图:

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

同时,可以留意到,客户端提供了几个缩进的单位,这些单位最后都会被转换成磅值进行保存。在word编程的接口中,仅提供了两个单位的缩进接口,如上表中,带有CharacterUnit字样的接口属于按字符为单位进行缩进,反之按磅值为单位进行缩进。

代码演示(接着上面的代码)


# 对第一个段落执行首行缩进2字符
rng1.ParagraphFormat.CharacterUnitFirstLineIndent = 2 # 等效的做法 一个字号磅值等于一个字符
rng1.ParagraphFormat.FirstLineIndent = 当前段落字号磅值 * 2

缩进避坑指南

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



所以,当我们要取消缩进时:

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

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

悬挂缩进

悬挂缩进和首行缩进共用接口,前者使用负数赋值,后者使用正数赋值,这非常简单,伪代码演示即可。

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

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

ok,本课内容就到这,下节课我们继续讲解Range的其他属性方法。

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

win32com操作word API精讲 第六集 Range(四)对齐和缩进的更多相关文章

  1. WKWebView API精讲(OC)

    WKWebView API精讲(OC) 前言 鉴于LL同志对笔者说:“能不能写个OC版本的WKWebView的使用教程?”,还积极打赏了30RMB,笔者又怎么好意思拒绝呢,于是才有了下文. 所有看到本 ...

  2. win32com操作word(1):几个重要的对象(28.35)

    Pywin32模块为python封装了操作windows底层API函数的功能.而win32com是Pywin32下面的一个模块,专门负责操作com组件. 由于office工具(Word.Excel等) ...

  3. win32com操作word(3):导入VBA常量

    导入VBA常量方法:http://blog.sina.com.cn/s/blog_a73687bc0101k8x8.html 我们之前说过,win32com组件为python提供处理COM组件(.dl ...

  4. win32com操作word(2):常用用法

    一.对象的位置关系: 1.Range属性位于(部分): Selection__Section__Cell__Paragraph__Table__Bookmark__Comment__Row__List ...

  5. 《修炼之道:.NET开发要点精讲》读书笔记(四)

    委托的作用:1)它允许把方法作为参数,传递给其它的模块:2)它允许我们同时调用多个具有相同签名的方法:3)它允许我们异步调用任何方法. “方法签名”指方法的参数个数.参数类型以及返回值等,具有相同签名 ...

  6. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  7. 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能

    第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...

  8. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

  9. 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中

    第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...

  10. 第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

    第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作 注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想 ...

随机推荐

  1. 8.pygame-定时器

    使用定时器添加敌机 游戏启动后,每隔一秒出现一架敌方飞机 每架飞机向屏幕下方飞行,速度各不相同 没加敌机出现的水平位置也不进相同 当敌机从屏幕下方飞出,不会再飞回到屏幕中   定时器 pygame中使 ...

  2. Spring源码知识

    bean的生命周期: 实例化:在堆空间中申请内存,使用反射来实现:(createBeanInstance) 自定义属性赋值(setter).容器对象属性赋值(invokeAwareMethods) 前 ...

  3. DQL-模糊查询

    DQL-模糊查询 模糊查询即模糊检索,是指搜索系统自动按照用户输入关键词的同义词进行模糊检索,从而得出较多的检索结果.与之相反的是"精准搜索".模糊检索也可以说是同义词检索,这里的 ...

  4. [苹果APP上架]ios App Store上架详细教程-一条龙顺滑上架-适合小白

    如何在 2022 年将您的应用提交到 App Store 您正在启动您的第一个应用程序,或者距离上次已经有一段时间了.作者纸飞机@cheng716051来给你讲讲将应用程序提交到 App Store ...

  5. Java多线程-ThreadPool线程池(三)

    开完一趟车完整的过程是启动.行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速.频繁地踩刹车等动作.因为在速度切换的过程中,发送机要多做一些工作,当然就要多费一些油. 而一个Java线程 ...

  6. python枚举类型 Enum

    在python中枚举是一种类(Enum) 枚举类中不能存在相同的标签名 枚举是可迭代的 例: from enum import Enum class Vip(Enum): MONDAY = 0 TUE ...

  7. 介绍一个jmeter录制脚本谷歌插件 —— metersphere-chrome-plugin

    该插件可将用户在浏览器操作时的 HTTP 请求记录下来并生成 JMX 文件(JMeter 脚本文件). 1. 插件解压 插件下载链接: https://pan.baidu.com/s/14nGb_s9 ...

  8. el-scrollbar 监测滚动条

    export function processScroll (_this) {   let _self = _this   let scrollbarEl = _this.$parent.wrap   ...

  9. C#where关键字约束

    where关键字的用法 where关键词一个最重要的用法就是在泛型的声明.定义中做出约束. 约束又分为接口约束.基类约束.构造函数约束.函数方法的约束. 1.接口约束,泛型参数必须实现相应的接口才可以 ...

  10. 2022春每日一题:Day 39

    题目:[USACO1.4]等差数列 Arithmetic Progressions 一个很显然的做法,枚举公差,首项,p,q这样的话复杂度爆炸,不过可以肯定的一点,如果我们这样做,找到了答案就可以直接 ...