大虾

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

在word编程中,RangeParagraph(s)接口无愧于劳模接口的称谓。大部分的接口都将Range封装成了属性,如页眉页脚、页面设置、正文内容、批注、图片、表格、公式、图形等等,有了Range属性,方便我们使用Range的方法和属性去操作它们。

Paragraphs(s)概述

Paragraphs接口能做什么

Paragraphs表示段落对象的集合,有三个接口有Paragraphs属性,分别为RangeSelectionDocument,这些接口的实例对象使用该属性就能获得各自范围内的全部段落了。下面为伪代码演示:

from win32com.client import Dispatch

client = Dispatch('word.Application')
client.Visible = 1

doc = client.Documents.Open('demo.doc')

# 统计Selection中有多少个段落
s = client.Selection
s.Start = 0
s.End = 10
print(s.Paragraphs.Count)
>>>1

# 统计Range中有多少个段落
rng = doc.Range(0,2)
print(rng.Paragraphs.Count)
>>>1

# 统计整个文档中有多少个段落
print(doc.Paragraphs.Count)
>>>8

Paragraphs和Paragrap有什么关系

复数表示所有段落,是一个集合,单数表示单个段落对象。Paragraph也是一个独立的接口,两者大部分都属性和方法都是共用的。下面伪代码演示了,如何通过Paragraphs获得某个Paragraph对象。

from win32com.client import Dispatch

client = Dispatch('word.Application')
client.Visible = 1

doc = client.Documents.Open('demo.doc')

# 谋取某个段落 以第一段举例
p1 = doc.Paragraphs(1)
p1 = doc.Paragraphs.Item(1)
p1 = doc.Paragraphs.First
p1 = doc.Paragraphs[0]

两者之间最明显的区别是,ParagraphRange属性,我们可以很方便地将某个段落转换成Range属性从而使用Range的属性和方法来操作该段落,而Paragraphs并没有。

word编程中段落是什么

在word编程中,但凡带有\r段落标记的都是段落,不仅仅文本的结束才会有段落标记,图片、表格、公式等资源,只要处于末尾,都会以段落标记结束。假若我已经打开了下方的文档,并通过接口获取第二段:

from win32com.client import Dispatch

client = Dispatch('word.Application')
client.Visible = 1

doc = client.Documents.Open('demo.doc')

print(doc.Paragraphs(2))
>>>'\r'

看起来第二段并无内容,但实际上它包含一个段落标记,段落标记也是段落内容,尤其在做文本比较的时候切勿忘记这点。同时,我们在使用Count属性统计段落数量时,如果文档中包含空段落的话,那么空段落一定被统计进来。

特殊情况:一个单元格也会被统计成一个段落,切记。

接口之间的相互转换

实际开发中,有不少接口之间是可以相互转换的,这极大地方便了我们的操作,如:

  • Range可以转换成Paragraphs
  • Paragraph从Paragraphs中获得
  • Paragraph可以转换成Range

这些转换都是通过使用属性完成的,如ParagraphRange属性会返回一个Range对象,意味着该段落也可以使用Range的属性和方法,RangeParagraphs属性会返回一个Paragraphs对象,意味着该范围也可以使用Paragraphs的属性和方法来。

这种转换非常方便,有不少的接口都有Range属性。

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

posted on 2023-01-31 21:30  一灯编程  阅读(298)  评论(0编辑  收藏  举报