win32com操作word API精讲 第十一集 Paragraph(s)操作格式

您所在的位置:网站首页 如何设置word格式取消标记 win32com操作word API精讲 第十一集 Paragraph(s)操作格式

win32com操作word API精讲 第十一集 Paragraph(s)操作格式

2024-02-08 19:54| 来源: 网络整理| 查看: 265

本课程《win32com操作word API精讲&项目实战》以视频为主,文字为辅,公众号ID:一灯编程

接着上一篇文章,继续探索Paragraph(s)的用法。

word文档的两种基本格式 文本格式:字体、字号、颜色、斜线、下划线及删除线段落格式:缩进、对齐、行间距、段落间距(段前后距)

Range可以直接操作文本格式,原因是文本格式的接口都被封装到了Range接口中成了属性,Range实例对象使用对应属性就可以操作文本格式了。

Paragraph(s)可以直接操作段落格式,段落格式是由ParagraphFormat接口统一实现的,这个接口中大部分常用的属性和方法都被封装到了Paragraph(s)接口中了。当然,也可以使用Paragraph(s)的实例对象再调用ParagraphFormat属性来操作相关的格式。

Paragraph(s)操作文本格式

Paragraph(s)不能直接操作文本格式,但Paragraph接口是有Range属性的,可以使用该属性来获得一个Range对象,然后就可以操作文本格式了,伪代码演示:

from win32com.client import Dispatch client = Dispatch('word.Application') client.Visible = 1 doc = client.Documents.Open('demo.docx') # 选取第一段 p1 = doc.Paragraphs(1) # 将Paragraph对象转换成Range对象,Range属性会返回一个Range对象 rng = p1.Range # 然后就可以操作文本格式了 rng.Font.Name = '黑体' 常用的段落格式

距离单位:在word客户端中,提供的距离单位有很多,行、字符、磅、厘米、毫米等,但在word编程中,只提供了行、磅、字符为单位的接口。

特别说明: 在实际的需求中,几乎很少对所有的段落执行统一的操作,毕竟,标题有标题的格式,提纲也有提纲的格式,正文的段落也会有自己的要求。实操中,一般都会使用Paragraph接口来操作单个段落对象。

行间距操作 Paragraph.LineSpacing(磅值) 这个属性会操作当前的段落格式中的行间距

示例代码

p1 = doc.Paragraphs(1) # 获取当前段落的行间距磅值 p1.LineSpacing >>> 12.0磅 # 将当前行间距设置为24磅 p1.LineSpacing = 24

LineSpacing操作的永远都是磅值,不管给用户暴露的是什么样的接口:单倍行距、1.5倍行距、固定值还是最小值。但在业务逻辑中,有些时候需要做单位转换的,如果用户操作的是1.8倍行距,此时需要做单位转换,以方便使用LineSpacing。

行与磅的转换关系:1行=12磅

段前后距操作

段前后距,即段间距,指一个段落前和段落后的距离,分别对应着两个接口。

SpaceBefore(段前磅值)LineUnitBefore(段前行值)SpaceAfter(段后磅值)LineUnitAfter(段后行值)

行与磅的转换关系:1行约等于15.6磅

伪代码演示:

p1 = doc.Paragraphs(1) # 获取段前距的磅值 p1.SpaceAfter # 设置段前距的磅值 p1.SpaceAfter = 12

避坑指南:word编程中,对于距离单位,如果设置的为非磅值,最后会被转换成磅值并保存,也就是说,是以磅值为主的。不过,对于段前后距,除了磅值,其他的距离单位也会保存,如:以行为单位设置段前距,既保存行值,也会保存转换后的磅值。它的坑在于:如果文档中采用了行值设置段前后距,此时要将段前后距设置为0,那么必须使用磅值为单位的接口设置为0才有效,行值为单位的接口设置是无效的,伪代码演示。

# 假如原文档中设置某个段落的段前距为1行,现在要设置为0 p1 = doc.Paragraphs(1) # 行值设置无会生效 p1.LineUnitBefore = 0 # 磅值设置才会生效 p1.SpaceBefore = 0

ok,今天的内容就先到这,下节课我们接着讲。有问题请留言、私信。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3