当前位置: 首页 > 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…...

python - 模块

rootlearning ~]# cat gcdfunction.py #写一个模块&#xff0c;并调用此模块 def gcd(n1,n2): #之前用过的求最大公约数的代码gcd 1k 2while k< n1 and k<n2:if n1%k 0 and n2 % k 0:gcd kk k 1return gcd [rootlearning ~]# cat module.py #完整代码 from gc…...

【Web】CTFSHOW java刷题记录(全)

目录 web279 web280 web281 web282 web283 web284 web285 web286 web287 web288 ​web289 web290 web291 web292 web293 web294 web295 web296 web297 web298 web299 web300 web279 题目提示 url里告诉我们是S2-001 直接进行一个exp的搜 S2-001漏洞分析…...

全球付汇业务的流程

全球付汇业务&#xff0c;主要是针对的进口类业务&#xff0c;并且是一般贸易进口的业务。 主要流程如下&#xff1a; 1.境内客户通过大额系统将人民币转入支付公司的备付金账户&#xff08;一般此客户为企业客户&#xff09;&#xff0c;转账需要通过大额系统&#xff1b; 2.至…...

ubuntu22.04@laptop OpenCV Get Started: 012_mouse_and_trackbar

ubuntu22.04laptop OpenCV Get Started: 012_mouse_and_trackbar 1. 源由2. mouse/trackbar应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 鼠标位置跟踪注释3.1 注册回调函数3.2 回调操作3.3 效果 4. 使用轨迹栏调整图像大小4.1 初始化轨迹栏&注册回调函数4.2 回调操作4.3 效…...

信息安全性测试

1 信息安全性测试 信息安全性测试是确保产品或系统能够有效地保护信息和数据&#xff0c;使得用户、其他产品或系统的访问权限与其授权类型和级别相一致的一系列检查过程。信息安全性测试也应该是一个持续的过程&#xff0c;确保信息系统能够抵御恶意攻击&#xff0c;并保护数…...

[HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…...

【Java】文件操作与IO

文件操作与IO Java中操作文件针对文件系统的操作File类概述字段构造方法方法及示例 文件内容的读写 —— 数据流Java提供的 “流” API文件流读写文件内容InputStream 示例读文件示例1&#xff1a;将文件完全读完的两种方式示例二&#xff1a;读取汉字 写文件谈谈 OutputStream…...

开关电源电路主要元器件基础知识详解

在学习电子电路过程中&#xff0c;电源我们无法绕开的一个重要部分&#xff0c;很多时候&#xff0c;故障就出现在电源部分&#xff0c;特别是开关电源。开关电源电路主要是由熔断器、热敏电阻器、互感滤波器、桥式整流电路、滤波电容器、开关振荡集成电路、开关变压器、光耦合…...

- 项目落地 - 《选择项目工具的方法论》

本文属于专栏《构建工业级QPS百万级服务》 提纲&#xff1a; 选择大概率能完成业务目标的工具选择最适合的工具制作最适合的工具 本文所说的项目工具&#xff0c;泛指业务软件开发&#xff0c;所依赖的第三方提供的成熟的资源。包括但不限于开发语言、编辑工具、编译工具、三方…...

美国突然致敬中本聪

作者&#xff1a;秦晋 有点看不懂美国的神操作。 2月16日&#xff0c;据《Bitcoin Magazine》报道&#xff0c;比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料&#xff0c;甚至惊掉下巴。 报道称&a…...