最近一直在忙于项目,以至于win32com的视频一直拖更。要不,书面形式更新吧。这次介绍的是Find接口。

假如,要在一篇2万字的文章中找到某些关键词,并返回Range对象,通常可以通过遍历段落 + 正则匹配的方式解决,伪代码如下:

import re
from win32com.client import Dispatch client = Dispatch('Word.Application')
client.Visible = 1 doc = client.Documents.Open('demo.doc') # 遍历段落 找出以“编程”开头的段落,返回Range
rng = None
for p in doc.Paragraphs:
if re.match('编程', str(p)):
rng = p.Range

文章很长,这样的执行效率并不是最高的,如果要找出多个关键词呢,for循环 + re就显得有点慢了,当然,慢是相对的。

Find接口简单使用

此时Find接口就可以登场了,它的实现和文档客户端中的查找是一样的。先看看Find接口的简单用法,伪代码演示。

Tips 该接口只能通过Range对象或Selection对象调用,这两个对象是可以定义任意范围的,意味着更灵活的使用,有时候并一定需要从头到尾找一篇。

from win32com.client import Dispatch

client = Dispatch('Word.Application')
client.Visible = 1 doc = client.Documents.Open('demo.doc') # 在文章中找到python的字样
rng = doc.Range()
# rng = doc.Content 也可以,两者有点不同,
# 绝大部分情况下这种不同并不会带来影响,
# 除非是在编辑书本 # 查找时忽略空格
rng.Find.IgnoreSpace = True
# 如果能找到返回True,反之False
ret = rng.Find.Execute('python')

划重点

1、如果能找到关键词,rng变成选中当前关键词,形成了一个新的Range对象,之前所声明的rng = doc.Range()将不复存在,反之,rng保持不变。

2、文档有多个关键词时,Find找到第一个时就会停止,并不会自动继续往下找,且默认向前查找。

如果想实现通篇文章查找,可通过while循环实现,伪代码演示

from win32com.client import Dispatch

client = Dispatch('Word.Application')
client.Visible = 1 doc = client.Documents.Open('demo.doc') rng_list = []
rng = doc.Range()
while True:
rng.Find.IgnoreSpace = True
ret = rng.Find.Execute('编程')
if ret:
rng_list.append(rng)
else:
break

划重点

1、记得有退出循环的条件;

2、rng不能声明在循环体中,不然ret永远都会返回True导致死循环。

Find接口进阶使用

在客户端的查找面板中,有通配符查找,本质上是正则,和常见的正则表达式,大部分是相同的,有某些是word的特色。比如查找在段落末尾的“编程”字样,伪代码演示(要考虑段落末尾是否有标点符号,此处假设没有)。

rng = doc.Range()
rng.Find.IgnoreSpace = True
rng.Find.Execute('编程^p')

^p是word中段落标记的通配符表示方法,如果把段落标记使用print打印出来,它是这样的\r

不过有点遗憾的是,至今依然不知道如何使用通配符来查找出现在每个段落开头的关键词。

关于更多的通配符使用,有兴趣的可自行搜索,内容还是很丰富的。

ok,今天就先讲这么多,下回继续。我拉了一个win32com编程的交流群,想交流的可加微信:yideng6618,备注:交流群。

win32com操作word 第十五 Find接口的使用的更多相关文章

  1. win32com操作word API精讲 第十集 Paragraphs & Paragraph接口 (一)

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 在word编程中,Range和Paragraph(s)接口无愧于劳模接口的称 ...

  2. win32com操作word 第二集:Application&Documents接口

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字教程为辅,公众号ID:一灯编程. 先回答一个网友私信问题: win32com和微软的word接口文档有什 ...

  3. win32com操作word API精讲 第七集 Range(五)字体格式精讲

    本课程<win32com操作word API精讲&项目实战>视频平台以视频为主,本平台以文字为主,公众号ID:一灯编程 本节课主要讲解使用Range操作Font接口中的字体.字号. ...

  4. win32com操作word API精讲&项目实战 预告

    对win32com的使用和研究有好一段时间了,想起本人刚开始做word编程项目时的各种痛苦:网上能找到的都是简单的示例,如同hello word一般,嚼之无味又无可奈何.读office的word接口文 ...

  5. win32com操作word 第三集:Range精讲(一)

    本课程<win32com操作word API精讲&项目实战>,本公众号以文字分享为主,B站与视频号则发布视频分享,ID均为:一灯编程 本集开始,将会深入Document接口.打开或 ...

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

    本课程<win32com操作word API精讲&项目实战>同步在B站.今日头条.视频号及本公众号发布.其中本公众号以发布文字教程为主. 今天是大年初二,一灯在此祝愿各位朋友兔年吉 ...

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

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

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

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

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

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

  10. C#图解教程 第十五章 接口

    接口 什么是接口 使用IComparable接口的示例 声明接口实现接口 简单接口示例 接口是引用类型接口和as运算符实现多个接口实现具有重复成员的接口多个接口的引用派生成员作为实现显式接口成员实现 ...

随机推荐

  1. 小傅哥自研插件,为开发提效80%,已经有8.1k安装量!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 哈喽,大家好我是技术UP主小傅哥. 如果你担心维护成本和性能考量,不想使用 BeanUtils ...

  2. Linux:LVM磁盘扩容实战

    1.列出分区表 命令:fdisk -l 查看到目前挂载了 vda1.vda2.vda3,并且查看到还有vdb 100G没有挂载,以及现在的LV大小仅为29G root@JumpServer-DB-T0 ...

  3. MyBatis 批量更新的处理

    一般来讲,在使用 MyBatis 进行数据库的访问时,通常会遇到需要更新数据的相关业务,在某些业务场景下,如果需要进行一批次的数据更新,可能性能不是特别理想.本文将简要介绍几种能够高效地处理批量更新数 ...

  4. 微短剧市场暴涨267.65%,用微短剧场景AUI Kit精巧入局

    微短剧,不仅上头,更要上心. 微短剧,深度"拿捏"了这个碎片化时代,也是刚过去的2023年绕不开的热词. 与传统影视剧制作精益求精.耗时长相反,门槛与耗时"双低" ...

  5. C++面试复习总结

    C++面试 本人20年3到4月内面了近十家公司,整理一下C++客户端问的多的基础问题 另:操作系统面试总结,OpenGL面试总结,计算机网络面试总结 代码到可执行程序 预处理:条件编译,头文件包含,宏 ...

  6. c#中用System.Diagnostics.Process.Start(Path.GetFullPath(“vlc.exe.lnk“), url);用vlc的快捷方式打开http的url不起作用?

    vlc.exe.lnk双击这个文件,能正常打开vlc,但是用System.Diagnostics.Process.Start(Path.GetFullPath("vlc.exe.lnk&qu ...

  7. 你应该知道的数仓安全——默认权限实现共享schema

    摘要: 一种典型客户场景是一些用户是数据的生产方,需要在schema中创建表并写入数据:而另一些用户是数据的消费方,读取schema中的数据做分析.使用Alter default privilege语 ...

  8. CANN开发实践:4个DVPP内存问题的典型案例解读

    摘要:由于DVPP媒体数据处理功能对存放输入.输出数据的内存有更高的要求(例如,内存首地址128字节对齐),因此需调用专用的内存申请接口,那么本期就分享几个关于DVPP内存问题的典型案例,并给出原因分 ...

  9. 云小课 | MRS基础入门之HDFS组件介绍

    摘要:HDFS是MapReduce服务中的基础文件系统,全称为Hadoop的分布式文件系统(Hadoop Distributed File System),可支持实现大规模数据可靠的分布式读写. 本文 ...

  10. 手把手带你做LiteOS的树莓派移植

    摘要:树莓派是英国的慈善组织"Raspberry Pi 基金会"开发的一款基于arm的微型电脑主板.本文介绍基于LiteOS的树莓派移植过程. 本文分享自华为云社区<2021 ...