目录
简介:
本文示例的流程:打开一个word文档,搜索关键词所在的段落,并将对应段落复制粘贴到新的word文档中,并标记出处文件名和页码。
可以用来批量对word文档进行提取。
打开原始word文档
curr_path = os.getcwd()
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\被搜索的原文.docx'%curr_path)#打开文档
创建一个新的文档(存放摘抄内容)
new_doc = doc_app.Documents.Add() new_doc.SaveAs(r'%s\摘抄.docx'%curr_path)
搜索关键词
word文档内容截图(关键词为“妈妈”)
#搜索
match_parag_index=0
search_range = doc.Content
while(1):
rtn = search_range.Find.Execute(FindText="妈妈", Forward=True)
if (rtn == False):
break
else:
rParagraphs = doc.Range(Start=0, End=search_range.Paragraphs(1).Range.End)#从文档开头到匹配段落的所有行的Range
if(match_parag_index!= rParagraphs.Paragraphs.Count):#避免重复行
match_parag_index = rParagraphs.Paragraphs.Count
print("段落编号: ", rParagraphs.Paragraphs.Count)
print(search_range.Paragraphs(1).Range.Text)
每次匹配到搜索结果,seatch_range会自动
执行效果:
如果一段之内有多个匹配的关键词,通过判断是否在是否与上一个匹配结果的行号,是否相同,避免重复粘贴相同的行。
复制和粘贴匹配的段落
search_range.Paragraphs(1).Range.Copy()#复制匹配的段落
new_doc.Paragraphs.Add()#添加新的一行
new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
source_info = doc.Name#填写来源的文件名
source_info += ',第%d页'%search_range.Information(constants.wdActiveEndPageNumber) #填写来源的页码
new_range.Text += source_info
new_doc.Paragraphs.Add()#添加新的一行
new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
new_range.Paste()
最终执行的结果:
完整的代码:
import win32com.client as win32
from win32com.client import constants
import os
curr_path = os.getcwd()
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\被搜索的原文.docx'%curr_path)#打开文档
new_doc = doc_app.Documents.Add()
new_doc.SaveAs(r'%s\摘抄.docx'%curr_path)
#搜索
match_parag_index=0
search_range = doc.Content
while(1):
rtn = search_range.Find.Execute(FindText="妈妈", Forward=True)
if (rtn == False):
break
else:
rParagraphs = doc.Range(Start=0, End=search_range.Paragraphs(1).Range.End)#从文档开头到匹配段落的所有行的Range
if(match_parag_index!= rParagraphs.Paragraphs.Count):
match_parag_index = rParagraphs.Paragraphs.Count
print("段落编号: ", rParagraphs.Paragraphs.Count)
print(search_range.Paragraphs(1).Range.Text)
search_range.Paragraphs(1).Range.Copy()#复制匹配的段落
new_doc.Paragraphs.Add()#添加新的一行
new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
source_info = doc.Name#填写来源的文件名
source_info += ',第%d页'%search_range.Information(constants.wdActiveEndPageNumber) #填写来源的页码
new_range.Text += source_info
new_doc.Paragraphs.Add()#添加新的一行
new_range = new_doc.Paragraphs.Last.Range #指向最后一行的Range
new_range.Paste()
new_doc.Save()
new_doc.Close()
doc.Close()
标签:search,word,python,doc,Range,range,文档,Paragraphs,new
From: https://blog.csdn.net/flashman911/article/details/142584132