批量提取word文件中文本框内容的三种方法

一、问题的提出

在日常的办公中,有时需要提取多个word文件中的文字框的内容。有时,文字框的数量比较多,而且处于文档的不同位置,手工提取比较耗时耗力,同时也可能会产生遗漏。

我们也可以通过VBA和Python来解决这个问题,虽然听起来有点儿小复杂,但是有了Chatgpt的加持,这个问题就不是那么麻烦了。

以下,我们采用三种不同的方法来提取文本框的内容,经过比较之后我们再做出判断。

二、手动提取文本框内容

手动选取的方法也比较简单,思路就是定位——选中——复制——粘贴,可以把一个文档中的文本框内容复制到一个新文档当中。

首先,我们选中文件中多个文本框中的一个,然后点击【开始】——【选择】——【选择相似的文本】,就可以全部选中所有文本框的内容,然后用快捷键ctrl+c复制,再打开一个新的文件粘贴就可以了。

经过测试,以上方法仅适用于word而不适用于wps。

三、Python批量提示文字框内容

我们也可以请出Python这款强大的武器,它最大的特点就是文件处理快捷、跨平台性强,可以批量地识别出多个文档中的全部文字框,并把其中的内容全部复制出来,写入一个新的文档。

1. 引入处理文档的包

要进行word文件的处理,我们就要安装并导入python-docx这个包,在确保安装python软件之后,在cmd里输入以下命令:

pip install python-docx

这样就可以安装必要的库,在使用时就可以通过这个库中的Document方法来读取和生成docx文件。

另外,还需要安装用于解析docx文件的lxml库,安装方法如上:

pip install lxml

另外还需要用到os, zipfile等标准库,这些都不用安装,使用时直接导入即可。

2. 算法分析

我们通过读取docx文件,解压该文件以获取内部XML结构,然后使用lxml库解析这个XML,查找所有文本框内容,并将这些内容添加到一个新的文档中。

我们还可以加入循环读取文件的方法,实现对当前目录下多个文件中文字框内容的提取。

为了避免提取的内容重复,我们还可以用set()对提取的内容进行去重。

3. 代码展示

明确了我们的目标之后,我们整理出指令,然后发送给ChatGPT,让它给出我们想要的代码,然后进行测试其可用性,并对代码进行必要的修改,最终形成以下代码。

from docx import Document
from lxml import etree
import zipfile
import os
 
# 加载.docx文件
source_docx = 'example.docx'
document = Document(source_docx)
 
# 解压.docx文件以访问其XML内容
with zipfile.ZipFile(source_docx, 'r') as docx_zip:
 xml_content = docx_zip.read('word/document.xml')
 
# 解析XML内容
xml_tree = etree.XML(xml_content)
 
# 定义命名空间
namespaces = {
 'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
 'v': 'urn:schemas-microsoft-com:vml'
}
 
# 创建新文档
output_docx = 'output_with_textboxes.docx'
new_document = Document()
 
# 已提取段落的文本集合
extracted_texts = set()
 
# 搜索文本框中的文本
textboxes = xml_tree.findall('.//w:txbxContent', namespaces)
for textbox in textboxes:
 paragraphs = textbox.findall('.//w:p', namespaces)
 for paragraph in paragraphs:
 texts = paragraph.findall('.//w:t', namespaces)
 paragraph_text = ''.join([text.text for text in texts if text.text])
 # 检查段落文本是否已经被提取
 if paragraph_text and paragraph_text not in extracted_texts:
 new_document.add_paragraph(paragraph_text)
 # 将提取的段落文本添加到集合中,以避免重复
 extracted_texts.add(paragraph_text)
 
# 保存新文档
new_document.save(output_docx)
 
print(f'文本框内容已被提取到 {output_docx}')

四、VBA批量提取文本框内容

相比python,VBA的方法更为简单,尤其是对于单个文件中的文本框,可以轻松提取。而且,我们还可以把VBA代码绑定成一个自定义的按钮,轻轻一点就可以提取所有文本框。

VBA代码的优势非常明显,不需要安装额外的软件,只用编写一个宏来遍历文档中所有的形状(Shapes),检查它们是否是文本框,然后将这些文本框中的文本提取出来并写入到一个新的Word文档中。

1. VBA代码实现

为确保VBA宏运行后生成的文件位于当前文档的目录下,可以使用ThisDocument.Path属性来获取当前文档所在的路径,然后基于这个路径构建目标文件的完整路径。

以下是修改后的VBA宏,它会将提取的文本保存到一个新的Word文档中,该文档位于当前活动文档的同一目录下:

Sub ExtractTextBoxContentAndSaveInCurrentDirectory()
 Dim srcDoc As Document
 Dim destDoc As Document
 Dim shape As shape
 Dim textBoxText As String
 Dim para As Paragraph
 Dim destPath As String
 
 ' 当前活动文档作为源文档
 Set srcDoc = ActiveDocument
 ' 创建一个新文档来存储提取的文本
 Set destDoc = Documents.Add
 
 ' 遍历源文档中的所有形状
 For Each shape In srcDoc.Shapes
 ' 检查形状是否是文本框
 If shape.Type = msoTextBox Then
 ' 获取文本框中的文本
 textBoxText = shape.TextFrame.TextRange.Text
 ' 将文本写入到目标文档
 Set para = destDoc.Content.Paragraphs.Add
 para.Range.Text = textBoxText & vbNewLine
 End If
 Next shape
 
 ' 构建目标文件的完整路径
 destPath = srcDoc.Path & "\ExtractedTextBoxContent.docx"
 
 ' 保存目标文档到当前文档所在目录
 destDoc.SaveAs2 FileName:=destPath
 
 ' 显示保存成功的消息
 MsgBox "文本框内容已提取到:" & destPath, vbInformation, "完成"
 
 ' 清理
 Set srcDoc = Nothing
 Set destDoc = Nothing
End Sub

2. 代码使用方法

使用VBA代码时,我们要打开Word文档,按下Alt + F11以打开VBA编辑器。在“项目”窗口中选择你的文档。通过右键点击你的文档名,选择【插入】——【模块】来创建一个新模块。在新模块中粘贴上述代码并保存,然后就可以运行当前的代码。或者关闭VBA编辑器,然后按下Alt + F8,选择ExtractTextBoxContentAndSaveInCurrentDirectory宏并运行。

在上述代码中,srcDoc.Path获取了当前活动文档的路径,然后用&连接\ExtractedTextBoxContent.docx构建了新文档的完整保存路径。这样,无论你的Word文档位于哪个目录,提取的文本都将被保存到与之相同的目录下。

五、学后反思

  1. 三种方法均可以实现对一个文件中所有文本框内容的提取。第一种是手动,步骤不算多,如果在粘贴时选择保存原格式,可以很好地保证文本框中文字的格式。它的唯一缺点时,不能对多个文件进行操作。
  2. Python和VBA都是编程的方法,实现过程有些复杂,但是均可以在以上代码的基础上经过修改后可以对多个文件进行批量的操作,省去了一个个打开文件、复制内容的过程。其缺点是很难保证提取出的内容格式不发生改变。
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
万兴PDF编辑器是一个非常容易使用的PDF编辑工具。在万兴PDF编辑器的帮助下,您可以添加、删除、剪切、复制、粘贴、编辑、编辑图片和许多其他操作到现有的PDF文档。您还可以从各种格式的文档创建PDF,如word、excel、ppt、图片、txt等。不仅如此,您还可以将PDF转换成可编辑的文档格式,并且还可以将各种文档合并成一个PDF文档。该软件功能非常全面,也非常容易使用。 软件截图: 软件功能: PDF文件编辑。打开PDF文档并打开PDF编辑模式,以修改PDF文档的文本并更改字体、字号和颜色。编辑图像和其他对象,随意拖动或移动要编辑的对象,自由添加和调整图像的大小,选择图像的位置,剪辑图像,多图片对齐等。 PDF格式转换。它支持将一个或多个PDF文件转换成各种其他格式的文件。转换后的文件质量很高,包括Powerpoint、Word、Excel、HTML、JPEG、TXT、RTF等格式。 PDF图片转文字。通过光学字符识别(也称为OCR识别),图像或打印文本可以转换为机器可读文本,识别精度高于同行。 PDF文件签名。对于所有需要签名的文档,数字签名比纸质签名更方便,可以有效保护文档安全。 PDF文档数据提取。在处理电子发票等格式相同的电子单据时,只要选择要提取的区域,所有单据的区域数据都可以批量导出。 软件特色: 创建一个可填写的PDF表格 只需单击一下,任何在Word、Excel或其他Office应用程序生成的现有平面表单都可以转换为可填充的可编辑PDF。 PDF格式转换 拖放鼠标,将PDF格式转换为PPT、Word、Excel、HTML、JPEG、PNG和其他格式。可以批量处理500多份文件。 文档注释和注释 在您想要的任何地方添加注释和文本框。用高亮、叉号和下划线标记文档以供审阅。 文档拆分和提取 将一个多页的PDF文档分成几个较小的文件,或者从文档提取一个指定的页面来生成一个单独的PDF文档。 添加贝茨代码 为文档添加可定制的贝茨数字,以便于索引和检索。 表单自动识别数据提取 智能表单自动化技术可以在几秒钟内将数百个相同表单的PDF表单数据提取到一个可编辑的Excel表单。 添加水印、背景、页眉和页脚 轻松添加和删除文本和图片水印、背景、页眉和页脚,允许您完全自定义创建的PDF文件。 密码和密文保护 使用高度机密的256位AES加密密码保护PDF文件,并设置锁定特定功能,如查看、打印、编辑、填充和旋转。
Word精灵2.0包含49个工具,用于强化WORD的功能。 它支持32位和64位的Word,支持Word 2007、2010、2013和2016,不支持WORD 2003。 导出所有批注 批量导出当前文档的所有批注到Excel工作表。 表格最佳宽度 让当前文档的所有表格自动调整为最佳宽度。 导出表格到Excel单表 将当前文档的所有表格导出到Excel工作表,有多个表格时会按先后顺序在同一个工作表逐一罗列出来。 导出表格到Excel多表 导出表格时将每一个WORD表格保存在单独的工作表,即WORD有多少个表格,则在Excel生成多少个工作表,逐一存放,同时还生成工作表目录。 批量缩放图片 按指定的倍数批量放大图片,或者按指定的百分比批量缩小图片。 统一图片尺寸 将指定路径的所有图片统一分辨率。 转换图片格式 将指定路径的所有图片统一转换成相同的格式。 批量插入图片 批量插入图片到当前文档,可以选择图片名称的显示方式,以及定义图片的高度。 批量导出图片 将当前文档的所有图片导出到指定的路径下,保存为JPG格式的图片文件。 所有数值 用红色标示出全文档的所有数值。 大于参考值 用红色标示出全文档的大于某个值的数值。 小于参考值 用红色标示出全文档小于某个值的数值。 带后缀的值 用红色标示具有某个后缀的数值。例如后缀设定为"元",那么只标示"元"结尾的数值。 带前缀的值 用红色标示具有某个前缀的数值。例如前缀设定为"借",那么只标示左边字符为"借"的数值。 大于&后缀 用红色标示具有指定后缀且大于某个参照值的数值。例如大于"100元",大于"59.9分"等等。 小于&后缀 用红色标示具有指定后缀且小于某个参照值的数值。例如小于"100元",小于"60分"等等。 大于&前缀 用红色标示具有指定前缀且大于某个参照值的数值。例如大于"借款100",大于"出货量4800"等等。 小于&前缀 用红色标示具有指定前缀且小于某个参照值的数值。例如小于"借款100",小于"出货量5000"等等。 清除空白行 批量删除所有空白的行。包含两种情况下,其一是一行只有一个换行符;其二是一行除了换行符只有空格。这两种情况都可以一键删除。 清除行首空格 清除选区每一个段落的前置空格。例如有些人喜欢用空格来实现首行缩进,时可以清除前置的空格,然后再执行工具"段落缩进"。 清除行尾空格 清除一个段落最末尾的空格,即位于换行符前面的空格。 清除超级链接 清除文档的所有超链接。 清除文本框 清除文档所有文本框(矩形也算)。 清除所有图片 清除文档内的所有图片。 按页拆分文档 将WORD文件的每一页替换成一个文档,适用于每页之间不存在关联、可以独立成文的文档。例如调查表,文档的每一页有一个表格,拆分后每一个文档都拥有完整独立的内容。 按一级标题拆分 将当前文档按一级标题拆分成多个文档(一级文档必须使用"样式1")。 合并文档 将选的多个文档内容合并到一个新文档批量替换 对当前文档的内容、页眉、页脚执行批量替换,例如将1替换成A,将2替换成B,将3替换成C...... 多文档批量替换 对多个WORD文档执行替换,包含正文、页眉和页脚。同时还支持多个关键字替换,例如将1替换成A,将2替换成B,将3替换成C...... 段落缩进 让指定的段落首行缩进俩字符。 英互译 对选区的字符执行译英、英译操作...... 插入编号 插入编号,包含5种样式。 二维码 将选区的字符生成二难码。 查日历 查询公历和农历日期。 转换式 批量转换文档格式。 提取XX前的值 根据指定的位置提取其前方的数值,并保存在剪贴板,您可以将它复制WORD或者Excel去。 提取XX后的值 根据指定的位置提取其右方的数值,并保存在剪贴板,您可以将它复制WORD或者Excel去。 金额大写 将小写的数值金额转换成人民币大写状态。在表格时支持批量转换。 小数转百分比 将带有小数的值转换成百分比形式,支持批量转换。 计算表达式 将表达式转换成计算结果,支持批量转换。 千分位分隔符 对整数大于3位的数值批量添加千分位分隔符。段落的值一次只能转一个数值,表格的值则可以批量转换。 标点统一全角半角 对选区或者全文统一标点符合的全角与半角状态。 快捷设置 快捷设置自动编号、禁止Internet及网络路径替换为超链接、禁止插入自动创建绘图画布和切换输入模式。 批量命名文件 对指定路径下的指定类型的文件批量命名,包含在原文件名称的前面插入字符/在后面插入字符,或者替换部分字符,删除部分字符等命名方式。 缩放文档内的图片 将当前文档插入的图片按指定的百分比缩小或者放大,以及还原到原图大小。 解除限制编辑 解除WORD自带的“限制编辑”功能。 快捷搜索与删除 搜索指定的目标,每点一次搜索下一个,也可以删除所有找到的目标。 段落加密 对选定的段落加密保护,使其显示为乱码。必须知道8位密码才能还原为原来的字符。 定位重复字 定位文档的所有重复字词,包含“AA”、“AAA”和“ABAB”三种形式。重复字词有可能是手误产生的,也可能是正常的重复,本工具仅仅定位目标,是否属于错误由用户自行判断,如果错误则可以马上纠错,如果正确则继续查找其他重复目标。本工具对于长文档纠错提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值