当前位置: 首页 > news >正文

批量提取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 DocumentDim destDoc As DocumentDim shape As shapeDim textBoxText As StringDim para As ParagraphDim 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.Addpara.Range.Text = textBoxText & vbNewLineEnd IfNext shape' 构建目标文件的完整路径destPath = srcDoc.Path & "\ExtractedTextBoxContent.docx"' 保存目标文档到当前文档所在目录destDoc.SaveAs2 FileName:=destPath' 显示保存成功的消息MsgBox "文本框内容已提取到:" & destPath, vbInformation, "完成"' 清理Set srcDoc = NothingSet destDoc = Nothing
End Sub

2. 代码使用方法

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

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

五、学后反思

  1. 三种方法均可以实现对一个文件中所有文本框内容的提取。第一种是手动,步骤不算多,如果在粘贴时选择保存原格式,可以很好地保证文本框中文字的格式。它的唯一缺点时,不能对多个文件进行操作。
  2. Python和VBA都是编程的方法,实现过程有些复杂,但是均可以在以上代码的基础上经过修改后可以对多个文件进行批量的操作,省去了一个个打开文件、复制内容的过程。其缺点是很难保证提取出的内容格式不发生改变。

相关文章:

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

一、问题的提出 在日常的办公中,有时需要提取多个word文件中的文字框的内容。有时,文字框的数量比较多,而且处于文档的不同位置,手工提取比较耗时耗力,同时也可能会产生遗漏。 我们也可以通过VBA和Python来解决这个问…...

Leecode之合并两个有序链表

一.题目及剖析 https://leetcode.cn/problems/merge-two-sorted-lists/description/ 二.思路引入 用指针遍历两个链表并实时比较,较小的元素进行尾插,然后较小元素的指针接着向后遍历 三.代码引入 /*** Definition for singly-linked list.* struct ListNode {* int va…...

陶建国教授谈中西方文化的差异与交融

龙年到来,这个春节里,“龙”字的英文翻译引发关注,冲上了热搜,网友发现,“龙”不再翻译为“dragon”,而是龙字的谐音“loong”。原来,在西方人的眼里,龙是凶猛的怪兽,具有…...

Ps:画笔选项

画笔选项 Brush Options提供了对画笔(圆形笔刷)基本属性的控制,比如大小、硬度、间距、角度和圆度等。 Photoshop 中的快速选择工具、污点修复画笔工具、修复画笔工具、颜色替换工具、背景橡皮擦工具等的工具选项栏上提供了这种圆形笔刷选项。…...

嵌入式——Flash(W25Q64)

目录 一、初识W25Q64 1. 基本认识 2. 引脚介绍 ​编辑 二、W25Q64特性 1. SPI模式 2. 双输出SPI方式 三、状态寄存器 1. BUSY位 2. WEL位 3. BP2、BP1、 BP0位 4. TB位 5. 保留位 6. SRP位 四、常用操作指令 1. 写使能指令(06h) 2. 写禁…...

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波,频率固定,占空比可以不断调整的方法,将PA0接到示波器上,可以看到是一个标准的PWM波,如图下面示波器图。 1,首先是ioc的配置 我刚开始设置的分频的倍数是7199,使得分频的太大了,示波器显示不了,最后修改为71就可以,我之前设置读取pwm也是一样的…...

phpstrom创建thinkphp项目

安装php和composer 参考 安装phpstrom 创建项目 查看thinkphp版本 https://packagist.org/packages/topthink/think 打开所在项目编辑配置 即可调试运行...

【Linux】线程同步

线程同步 一、条件变量1. 同步概念2. 条件变量概念3. 条件变量接口(1)pthread_cond_init()(2)pthread_cond_destroy()(3)pthread_cond_wait()(4)pthread_cond_signal()(5…...

如何在多头自注意力机制的交叉学习中引入对于物理、生理、心理世界客观规律的对照验证...

要在多头自注意力机制的交叉学习中引入对于物理世界客观规律的对照验证,可以考虑以下方法: 1、引入物理模型 首先,建立一个物理模型,该模型能够描述物理世界中的客观规律。这个模型可以是已知的科学理论,也可以是通过实…...

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…...

vue导出word文档(图文示例)

第076个 查看专栏目录: VUE 本文章目录 示例说明示例效果图导出的文件效果截图示例源代码参数说明:重要提示:API 参考网址 示例说明 在Vue中导出Word文档,可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库: npm …...

【C Primer Plus第六版 学习笔记】 第十七章 高级数据表示

有基础&#xff0c;进阶用&#xff0c;个人查漏补缺 链表&#xff1a;假设要编写一个程序&#xff0c;让用户输入一年内看过的所有电影&#xff0c;要储存每部影片的片名和评级。 #include <stdio.h> #include <stdlib.h> /* 提供malloc()的原型 */ #include <s…...

租用一个服务器需要多少钱?2024阿里云新版报价

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…...

python-产品篇-游戏-成语填填乐

文章目录 准备代码效果 准备 无需其他文件&#xff0c;复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…...

数据库数据加密的 4 种常见思路的对比

应用层加解密方案数据库前置处理方案磁盘存取环节&#xff1a;透明数据加密DB 后置处理 最近由于工作需要&#xff0c;我对欧洲的通用数据保护条例做了调研和学习&#xff0c;其中有非常重要的一点&#xff0c;也是常识性的一条&#xff0c;就是需要对用户的个人隐私数据做好加…...

HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-PWM

目录 一、PWM 概述二、PWM 模块相关API三、接口调用实例四、PWM HDF驱动开发4.1、开发步骤(待续...) 坚持就有收获 一、PWM 概述 PWM&#xff08;Pulse Width Modulation&#xff09;又叫脉冲宽度调制&#xff0c;它是通过对一系列脉冲的宽度进行调制&#xff0c;等效出所需要…...

001kafka源码项目gradle报错UnsupportedClassVersionError-kafka-报错-大数据学习

1 报错提示 java.lang.UnsupportedClassVersionError: org/eclipse/jgit/lib/AnyObjectId has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 如…...

单片机学习笔记---直流电机驱动(PWM)

直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&#xff09;和换向器…...

Scrum敏捷培训机构推荐

敏捷培训机构中&#xff0c;Scrum中文网&#xff08;www.scrum.cn&#xff09;是一个值得考虑的选择。 Scrum中文网(Scrum.CN)是全球第一个Scrum中文网站&#xff0c;是中国最早的Scrum和敏捷的布道者、教育及推广机构&#xff0c;也是国际Scrum联盟&#xff08;Scrum Allianc…...

《Go 简易速速上手小册》第5章:并发编程(2024 最新版)

文章目录 5.1 Goroutines 的基础 - Go 语言中的轻盈舞者5.1.1 基础知识讲解5.1.2 重点案例&#xff1a;并发下载器功能描述实现代码扩展功能 5.1.3 拓展案例 1&#xff1a;网站健康检查功能描述实现代码扩展功能 5.1.4 拓展案例 2&#xff1a;并发日志处理器拓展案例 2&#xf…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...