欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)批量提取word文件中文本框內容

 更新時間:2024年02月13日 08:39:08   作者:PythonFun  
在日常的辦公中,有時需要提取多個word文件中的文字框的內容,這篇文章主要為大家介紹了三種常見的方法來提取文本框的內容,希望對大家有一定的幫助

一、問題的提出

在日常的辦公中,有時需要提取多個word文件中的文字框的內容。有時,文字框的數(shù)量比較多,而且處于文檔的不同位置,手工提取比較耗時耗力,同時也可能會產(chǎn)生遺漏。

我們也可以通過VBA和Python來解決這個問題,雖然聽起來有點兒小復雜,但是有了Chatgpt的加持,這個問題就不是那么麻煩了。

以下,我們采用三種不同的方法來提取文本框的內容,經(jīng)過比較之后我們再做出判斷。

二、手動提取文本框內容

手動選取的方法也比較簡單,思路就是定位——選中——復制——粘貼,可以把一個文檔中的文本框內容復制到一個新文檔當中。

首先,我們選中文件中多個文本框中的一個,然后點擊【開始】——【選擇】——【選擇相似的文本】,就可以全部選中所有文本框的內容,然后用快捷鍵ctrl+c復制,再打開一個新的文件粘貼就可以了。

經(jīng)過測試,以上方法僅適用于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)讀取文件的方法,實現(xià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])
 # 檢查段落文本是否已經(jīng)被提取
 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代碼實現(xiàn)

為確保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文檔位于哪個目錄,提取的文本都將被保存到與之相同的目錄下。

五、學后反思

三種方法均可以實現(xiàn)對一個文件中所有文本框內容的提取。第一種是手動,步驟不算多,如果在粘貼時選擇保存原格式,可以很好地保證文本框中文字的格式。它的唯一缺點時,不能對多個文件進行操作。

Python和VBA都是編程的方法,實現(xiàn)過程有些復雜,但是均可以在以上代碼的基礎上經(jīng)過修改后可以對多個文件進行批量的操作,省去了一個個打開文件、復制內容的過程。其缺點是很難保證提取出的內容格式不發(fā)生改變。

到此這篇關于Python實現(xiàn)批量提取word文件中文本框內容的文章就介紹到這了,更多相關Python提取word文本框內容內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python numpy ndarray屬性,索引,切片

    Python numpy ndarray屬性,索引,切片

    這篇文章主要介紹了Python numpy ndarray屬性,索引,切片,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • tornado捕獲和處理404錯誤的方法

    tornado捕獲和處理404錯誤的方法

    這篇文章主要介紹了tornado捕獲和處理404錯誤的方法,方法很簡單,只要覆寫write_error方法就可以,看下面的代碼就明白了
    2014-02-02
  • python基礎教程之對象和類的實際運用

    python基礎教程之對象和類的實際運用

    這篇文章主要介紹了python基礎教程之對象和類的實際運用,本文講解對象和類的一方法技巧,例如屬性、內置方法、self關鍵字的運用等,需要的朋友可以參考下
    2014-08-08
  • python數(shù)據(jù)結構輸入輸出及控制和異常

    python數(shù)據(jù)結構輸入輸出及控制和異常

    這篇文章主要介紹了python數(shù)據(jù)結構輸入輸出及控制和異常,上一章節(jié)中我們介紹了python的基礎數(shù)據(jù)類型和集合數(shù)據(jù)類型,這章節(jié)給大家介紹一下python的輸入輸出、控制和異常,對數(shù)據(jù)類型感興趣的同學可以查看一下文章<BR>
    2021-12-12
  • python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強大!需要的朋友可以參考下
    2014-07-07
  • Python裝飾器原理與基本用法分析

    Python裝飾器原理與基本用法分析

    這篇文章主要介紹了Python裝飾器原理與基本用法,結合實例形式分析了Python裝飾器的基本功能、原理、用法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • OpenCV半小時掌握基本操作之濾波器

    OpenCV半小時掌握基本操作之濾波器

    這篇文章主要介紹了OpenCV基本操作之濾波器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python條件和循環(huán)的使用方法

    python條件和循環(huán)的使用方法

    下面我們來介紹python條件語句和循環(huán)語句的使用方法。
    2013-11-11
  • 使用Python實現(xiàn)全攝像頭拍照與鍵盤輸入監(jiān)聽功能

    使用Python實現(xiàn)全攝像頭拍照與鍵盤輸入監(jiān)聽功能

    這篇文章主要介紹了使用Python實現(xiàn)全攝像頭拍照與鍵盤輸入監(jiān)聽功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • python批量下載網(wǎng)站馬拉松照片的完整步驟

    python批量下載網(wǎng)站馬拉松照片的完整步驟

    這篇文章主要給大家介紹了關于利用python批量下載網(wǎng)站馬拉松照片的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12

最新評論