win32com操作word 第十五 Find接口的使用
最近一直在忙于项目,以至于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接口的使用的更多相关文章
- win32com操作word API精讲 第十集 Paragraphs & Paragraph接口 (一)
本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 在word编程中,Range和Paragraph(s)接口无愧于劳模接口的称 ...
- win32com操作word 第二集:Application&Documents接口
本课程<win32com操作word API精讲&项目实战>以视频为主,文字教程为辅,公众号ID:一灯编程. 先回答一个网友私信问题: win32com和微软的word接口文档有什 ...
- win32com操作word API精讲 第七集 Range(五)字体格式精讲
本课程<win32com操作word API精讲&项目实战>视频平台以视频为主,本平台以文字为主,公众号ID:一灯编程 本节课主要讲解使用Range操作Font接口中的字体.字号. ...
- win32com操作word API精讲&项目实战 预告
对win32com的使用和研究有好一段时间了,想起本人刚开始做word编程项目时的各种痛苦:网上能找到的都是简单的示例,如同hello word一般,嚼之无味又无可奈何.读office的word接口文 ...
- win32com操作word 第三集:Range精讲(一)
本课程<win32com操作word API精讲&项目实战>,本公众号以文字分享为主,B站与视频号则发布视频分享,ID均为:一灯编程 本集开始,将会深入Document接口.打开或 ...
- win32com操作word API精讲 第六集 Range(四)对齐和缩进
本课程<win32com操作word API精讲&项目实战>同步在B站.今日头条.视频号及本公众号发布.其中本公众号以发布文字教程为主. 今天是大年初二,一灯在此祝愿各位朋友兔年吉 ...
- win32com操作word(1):几个重要的对象(28.35)
Pywin32模块为python封装了操作windows底层API函数的功能.而win32com是Pywin32下面的一个模块,专门负责操作com组件. 由于office工具(Word.Excel等) ...
- win32com操作word(3):导入VBA常量
导入VBA常量方法:http://blog.sina.com.cn/s/blog_a73687bc0101k8x8.html 我们之前说过,win32com组件为python提供处理COM组件(.dl ...
- win32com操作word(2):常用用法
一.对象的位置关系: 1.Range属性位于(部分): Selection__Section__Cell__Paragraph__Table__Bookmark__Comment__Row__List ...
- C#图解教程 第十五章 接口
接口 什么是接口 使用IComparable接口的示例 声明接口实现接口 简单接口示例 接口是引用类型接口和as运算符实现多个接口实现具有重复成员的接口多个接口的引用派生成员作为实现显式接口成员实现 ...
随机推荐
- C#中await /async 的使用场景,优点,使用方法介绍
async/await 是 C# 中异步编程的关键特性,它使得异步代码编写更为简单和直观.下面深入详细描述了 async/await 的使用场景.优点以及一些高级使用方法,并提供了相应的实例源代码. ...
- 基于Qt的Live2D模型显示以及控制
基于Qt的Live2D模型显示以及控制 基本说明 Live2D官方提供有控制Live2D模型的SDK,而且还提供了一个基于OpenGL的C++项目Example,我们可以基于该项目改成Qt的项目,做一 ...
- Django笔记四十四之Nginx+uWSGI部署Django以及Nginx负载均衡操作
本文首发于公众号:Hunter后端 原文链接:Django笔记四十四之Nginx+uWSGI部署Django以及Nginx负载均衡操作 这一篇笔记介绍如何使用 Nginx + uWSGI 来部署 Dj ...
- Socket编程和实现聊天室
一.HTTP协议的socket通信 1.server.py # 服务端 import sys import socket ip_point = ('127.0.0.1',9999) sk = sock ...
- 组合式api-通过reactive和ref提供响应式数据
在setup中如果是直接定义遍历数据并不是响应式数据,和vue2中的data选项提供的数据不一样,vue2的data中返回的数据全部都是响应式数据. <script setup> // 这 ...
- 告别复杂排版:Markdown语法指南
导语:Markdown作为一种轻量级的标记语言,以其简洁.易学的语法和强大的兼容性赢得了广泛的应用.本文将为您详细介绍Markdown的起源.基本语法及其在写作.博客.项目管理等场景的应用,带您领略这 ...
- 什么是Helm?它是如何提升云原生应用私有化部署效率的
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享 试想一下,如果有一个项目有50 个微服务,每个微服务都有service.deployment.ingress.pvc等 ya ...
- libGDX游戏开发之按轨迹移动(十一)
libGDX游戏开发之运动轨迹绘制(十一) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和go ...
- 降低node版本,怎么降低node版本
降低node版本,怎么降低node版本? 部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果. ...
- C++篇:第七章_结构体、共用体和枚举_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 七.结构体.共用体和枚举 (一)结构体 C++的结构体中可以有构造函数,例: s ...