目录
需求:
复制word文档里的两个关键字(例如“起始位置”到“结束位置”)之间的内容到新的word文档。
解决方案:
python代码找到起始位置和终止位置,选择二者之间的内容采用.Copy()包和.Paste()包进行复制粘贴至新文档。
前提:安装win32包,通过pip install pywin32命令直接安装。话不多说,直接上代码。
1.📃📃完整python代码
1.1📃打开word
基于win32包打开word应用程序,并设置word为可视化状态,否则word文档是隐藏的,无法在文件夹下查看到,此处需要注意,不可省略。
定义好word打开程序就可输入文件路径进行打开了,注意此处的file_path是已经存在的文档。
# 打开word应用程序
word = win32.gencache.EnsureDispatch('Word.Application')
# 是否可视化
word.Visible = 0
# 源文件路径
file_path = r'D:/A.docx'
# 打开
doc = word.Documents.Open(file_path)
1.2📃设置起始位置
设置起始位置的主要功能就是光标start的查找,FindText的内容是表示在该内容之后设置起始光标。主要实现步骤是:
- 查找字符“起始位置”,此处可根据自己的文档内容进行修改
- 此处的光标设置的是在FindText的内容左移,即FindText的内容之后,不包含FindText的内容。
- 将光标位置转换成数字,记作start
Python代码实现如下:
# 赋值对象
search_range = doc.Content
# 查找内容
search_range.Find.Execute(FindText="起始位置")
# 选中查找到的内容
search_range.Select()
# 光标左移
word.Selection.MoveLeft()
# 将光标位置赋予start
start = word.Selection.Start.numerator
print(start)
1.3📃设置终止位置
与起始位置查找一样,设置终止位置的主要功能就是光标end的查找,FindText的内容是表示在该内容之前设置起始光标。主要实现步骤是:
- 查找字符“结束位置”,此处可根据自己的文档内容进行修改
- 此处的光标设置的是在FindText的内容左移,即FindText的内容之后,不包含FindText的内容。
- 将光标位置转换成数字,记作end
- 此时的数据是一个很大的数字,因为它代表的不是字数,而是字符数,所以跟字数是对不上的,不需要管。
python代码实现如下:
# 光标end的查找 同上
search_range = doc.Content
search_range.Find.Execute(FindText="结束位置")
search_range.Select()
word.Selection.MoveLeft()
end = word.Selection.Start.numerator
print(end)
1.4📃复制起始位置到终止位置的文档内容
这一步比较简单,选取光标start到光标end的内容,调用word.Selection.Copy()命令复制选中文档内容。
Python代码实现如下:
# 选取光标start到光标end的内容
doc.Range(start, end).Select()
# 复制
word.Selection.Copy()
1.5📃粘贴剪切板内容并保存至新的word文档中
这一步主要是将上一步复制的内容粘贴到新文档,操作步骤如下:
- 打开新的word文档,注意此时的文档也是需要提前建好的,是个空白文档。
- 调用.Application.ActiveDocument.Range().Paste()库进行文档粘贴操作
- 注意此时的主要工作完成了,但是一定要记得关闭两个文档,关闭文档的方法就是调用.Close()库进行文档关闭。
Python代码实现如下:
# 粘贴的目标文件
doc_new = word.Documents.Open('D:/B.docx')
# 粘贴
doc_new.Application.ActiveDocument.Range().Paste()
# 关闭两个文件
doc_new.Close()
doc.Close()
1.6📃完整python代码
完整的python代码如下,包含以上4个步骤,可直接复用。
import win32com.client as win32
from win32com.client import constants
import os
# 打开word应用程序
word = win32.gencache.EnsureDispatch('Word.Application')
# 是否可视化
word.Visible = 0
# 源文件路径
file_path = r'D:/A.docx'
# 打开
doc = word.Documents.Open(file_path)
# 光标start的查找
# 赋值对象
search_range = doc.Content
# 查找内容
search_range.Find.Execute(FindText="起始位置")
# 选中查找到的内容
search_range.Select()
# 光标左移
word.Selection.MoveLeft()
# 将光标位置赋予start
start = word.Selection.Start.numerator
print(start)
# 光标end的查找 同上
search_range = doc.Content
search_range.Find.Execute(FindText="结束位置")
search_range.Select()
word.Selection.MoveLeft()
end = word.Selection.Start.numerator
print(end)
# 选取光标start到光标end的内容
doc.Range(start, end).Select()
# 复制
word.Selection.Copy()
# 粘贴的目标文件
doc_new = word.Documents.Open('D:/B.docx')
# 粘贴
doc_new.Application.ActiveDocument.Range().Paste()
# 关闭两个文件
doc_new.Close()
doc.Close()
2.📋📋结果展示
2.1输入
输入word文档A.docx内容如下:
“
这是个测试文件: 请复制以下内容到新文档,起始位置攀登航天科技高峰总书记指明方向 - 中国日报网
在建设航天强国之路上勇攀科技高峰.是中国几代航天人探索太空的坚定的信念、执着的追求、套斗的行为准则。结束位置
”
为了清晰看到起始位置和结束位置,特地将两个位置加粗显示,在word中查看A.docx:
2.2输出
经过第一节的Python代码,把两个位置之间的内容复制到一个新文档中并保存新文档。保存出来的B.docx内容如下:
“
攀登航天科技高峰总书记指明方向 - 中国日报网
在建设航天强国之路上勇攀科技高峰.是中国几代航天人探索太空的坚定的信念、执着的追求、套斗的行为准则。
”
可以看到,起始位置之前的内容全部没有了,终止位置之后的内容全部没有了,只有起始位置到终止位置之间的内容,在word中显示B.docx内容如下:
PS:该方法可以保留文档格式段落保持不变,非常奈斯✅。
总结:
语句win32库打开和保存word文档,并根据字符信息查看起始位置和终止位置,并对二者之间的内容进行复制,并粘贴到一个新word文档中,实现依据word文档内容选择特定内容到新的word文档中的目的。
参考:参考链接
整理不易,欢迎一键三连!!!
送你们一条美丽的--分割线--
🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷