Python實現批量提取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,查找所有文本框內容,并將這些內容添加到一個新的文檔中。
我們還可以加入循環(huán)讀取文件的方法,實現對當前目錄下多個文件中文字框內容的提取。
為了避免提取的內容重復,我們還可以用set()對提取的內容進行去重。
3. 代碼展示
明確了我們的目標之后,我們整理出指令,然后發(fā)送給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'
}
# 創(chuàng)建新文檔
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代碼的優(yōu)勢非常明顯,不需要安裝額外的軟件,只用編寫一個宏來遍歷文檔中所有的形狀(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 ' 創(chuàng)建一個新文檔來存儲提取的文本 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編輯器。在“項目”窗口中選擇你的文檔。通過右鍵點擊你的文檔名,選擇【插入】——【模塊】來創(chuàng)建一個新模塊。在新模塊中粘貼上述代碼并保存,然后就可以運行當前的代碼?;蛘哧P閉VBA編輯器,然后按下Alt + F8,選擇ExtractTextBoxContentAndSaveInCurrentDirectory宏并運行。
在上述代碼中,srcDoc.Path獲取了當前活動文檔的路徑,然后用&連接\ExtractedTextBoxContent.docx構建了新文檔的完整保存路徑。這樣,無論你的Word文檔位于哪個目錄,提取的文本都將被保存到與之相同的目錄下。
五、學后反思
三種方法均可以實現對一個文件中所有文本框內容的提取。第一種是手動,步驟不算多,如果在粘貼時選擇保存原格式,可以很好地保證文本框中文字的格式。它的唯一缺點時,不能對多個文件進行操作。
Python和VBA都是編程的方法,實現過程有些復雜,但是均可以在以上代碼的基礎上經過修改后可以對多個文件進行批量的操作,省去了一個個打開文件、復制內容的過程。其缺點是很難保證提取出的內容格式不發(fā)生改變。
到此這篇關于Python實現批量提取word文件中文本框內容的文章就介紹到這了,更多相關Python提取word文本框內容內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python和Pillow庫開發(fā)圖片轉GIF工具的完整流程
這篇文章主要介紹了使用 Python 和 Pillow 庫開發(fā)圖片轉 GIF 工具的完整流程,工具支持多格式圖片輸入、自定義幀率、統一圖片尺寸及設置循環(huán)次數等核心功能,采用命令行參數解析實現便捷操作,需要的朋友可以參考下2025-10-10
python3中超級好用的日志模塊-loguru模塊使用詳解
loguru默認的輸出格式是上面的內容,有時間、級別、模塊名、行號以及日志信息,不需要手動創(chuàng)建?logger,直接使用即可,另外其輸出還是彩色的,看起來會更加友好,這篇文章主要介紹了python3中超級好用的日志模塊-loguru模塊使用詳解,需要的朋友可以參考下2022-11-11
Python爬蟲抓取豆瓣TOP250數據從分析到實踐的全過程(詳細圖解)
本文介紹了使用Python爬取豆瓣電影Top250數據的方法,首先驗證了目標數據在頁面源代碼中,然后通過requests模塊獲取頁面內容,添加請求頭繞過反爬機制,接著使用re模塊編寫正則表達式,采用惰性匹配模式提取信息,通過循環(huán)實現翻頁爬取,將10頁共250條數據保存為CSV文件2025-10-10
Python logging管理不同級別log打印和存儲實例
這篇文章主要介紹了Python logging管理不同級別log打印和存儲實例,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

