Python高效提取與自動(dòng)化處理Word表格的完整指南
在日常辦公和自動(dòng)化處理場(chǎng)景中,Word 文檔(DOC/DOCX)依然是最常見(jiàn)的數(shù)據(jù)載體之一。許多業(yè)務(wù)數(shù)據(jù)、統(tǒng)計(jì)報(bào)表、合同條款或配置信息,往往以表格的形式存在于 Word 文檔中。當(dāng)我們需要對(duì)這些表格數(shù)據(jù)進(jìn)行進(jìn)一步處理(如導(dǎo)入數(shù)據(jù)庫(kù)、轉(zhuǎn)換為 Excel、生成報(bào)表或進(jìn)行數(shù)據(jù)分析)時(shí),手動(dòng)復(fù)制粘貼顯然效率低下,也容易出錯(cuò)。
借助 Python 以及專業(yè)的文檔處理庫(kù),我們可以實(shí)現(xiàn) 自動(dòng)化提取 Word 表格內(nèi)容 ,并將其保存為結(jié)構(gòu)化文本文件或其他格式。本文將詳細(xì)介紹如何使用 Spire.Doc for Python ,從 Word 文檔中逐個(gè)提取表格,并將表格內(nèi)容導(dǎo)出為文本文件。
為什么選擇 Spire.Doc for Python
在眾多 Python 文檔處理方案中,Spire.Doc for Python 是一款面向開(kāi)發(fā)者的專業(yè) Word 文檔處理庫(kù),具備以下顯著優(yōu)勢(shì):
- 無(wú)需依賴 Microsoft Word :純 Python 實(shí)現(xiàn),適合服務(wù)器和自動(dòng)化環(huán)境
- 支持完整 Word 結(jié)構(gòu) :段落、表格、頁(yè)眉頁(yè)腳、樣式等均可訪問(wèn)
- API 設(shè)計(jì)清晰 :面向?qū)ο?,邏輯與 Word 文檔結(jié)構(gòu)高度一致
- 穩(wěn)定可靠 :適合批量處理與企業(yè)級(jí)應(yīng)用場(chǎng)景
在提取表格這種涉及文檔層級(jí)遍歷的任務(wù)中,Spire.Doc 提供了非常直觀的對(duì)象模型,使代碼既清晰又易于維護(hù)。
實(shí)現(xiàn)思路概述
從 Word 中提取表格,本質(zhì)上是對(duì) Word 文檔結(jié)構(gòu)的逐層遍歷。整體流程如下:
- 加載 Word 文檔
- 遍歷文檔中的所有 Section(節(jié))
- 在每個(gè) Section 中獲取所有表格(Table)
- 遍歷表格中的行(Row)和單元格(Cell)
- 讀取單元格內(nèi)的段落文本
- 按行列結(jié)構(gòu)拼接表格數(shù)據(jù)
- 將每個(gè)表格保存為獨(dú)立的文本文件
這種方式不僅能夠完整保留表格結(jié)構(gòu),也便于后續(xù)擴(kuò)展為 CSV、Excel 或數(shù)據(jù)庫(kù)導(dǎo)入邏輯。
準(zhǔn)備工作
在開(kāi)始之前,請(qǐng)確保你的環(huán)境已準(zhǔn)備就緒:
- • Python 3.x
- • 已安裝
spire.doc(Spire.Doc for Python)
安裝方式示例:
pip install spire-doc
安裝完成后,即可在 Python 項(xiàng)目中直接引用相關(guān)模塊。
示例代碼:從 Word 提取表格并保存為文本文件
下面是完整的示例代碼,用于從 Word 文檔中提取所有表格,并將每個(gè)表格保存為一個(gè) .txt 文件。
from spire.doc import *
from spire.doc.common import *
# 創(chuàng)建 Document 實(shí)例
doc = Document()
# 加載 Word 文檔
doc.LoadFromFile("Input.docx")
# 遍歷文檔中的所有節(jié)(Section)
for s in range(doc.Sections.Count):
# 獲取當(dāng)前節(jié)
section = doc.Sections.get_Item(s)
# 獲取當(dāng)前節(jié)中的所有表格
tables = section.Tables
# 遍歷當(dāng)前節(jié)中的表格
for i in range(0, tables.Count):
# 獲取表格對(duì)象
table = tables.get_Item(i)
# 用于存儲(chǔ)當(dāng)前表格數(shù)據(jù)的字符串
tableData = ''
# 遍歷表格中的所有行
for j in range(0, table.Rows.Count):
# 遍歷當(dāng)前行中的所有單元格
for k in range(0, table.Rows.get_Item(j).Cells.Count):
# 獲取單元格對(duì)象
cell = table.Rows.get_Item(j).Cells.get_Item(k)
# 用于存儲(chǔ)單元格中的文本內(nèi)容
cellText = ''
# 遍歷單元格中的所有段落
for para in range(cell.Paragraphs.Count):
paragraphText = cell.Paragraphs.get_Item(para).Text
cellText += (paragraphText + ' ')
# 將單元格文本追加到表格數(shù)據(jù)字符串中
tableData += cellText
# 如果不是最后一個(gè)單元格,則添加制表符作為列分隔符
if k < table.Rows.get_Item(j).Cells.Count - 1:
tableData += '\t'
# 當(dāng)前行結(jié)束后,添加換行符
tableData += '\n'
# 將表格數(shù)據(jù)保存為文本文件
with open(f'output/Tables/WordTable_{s+1}_{i+1}.txt', 'w', encoding='utf-8') as f:
f.write(tableData)
# 關(guān)閉文檔,釋放資源
doc.Close()
代碼詳解
下面我們對(duì)核心代碼邏輯進(jìn)行逐步解析,幫助你更好地理解其工作原理。
1. 加載 Word 文檔
doc = Document()
doc.LoadFromFile("Input.docx")
這里創(chuàng)建了一個(gè) Document 實(shí)例,并加載指定路徑下的 Word 文件。Document 是 Spire.Doc 中表示整個(gè) Word 文檔的核心對(duì)象。
2. 遍歷文檔中的 Section
for s in range(doc.Sections.Count):
section = doc.Sections.get_Item(s)
在 Word 中,文檔可能由多個(gè) Section 組成(例如分頁(yè)、不同頁(yè)眉頁(yè)腳設(shè)置)。為了不遺漏任何表格,我們需要遍歷所有 Section。
3. 獲取并遍歷表格
tables = section.Tables
for i in range(0, tables.Count):
table = tables.get_Item(i)
每個(gè) Section 都可能包含多個(gè)表格。通過(guò) section.Tables 可以直接獲取該節(jié)中的所有表格對(duì)象。
4. 遍歷行和單元格
for j in range(0, table.Rows.Count):
for k in range(0, table.Rows.get_Item(j).Cells.Count):
cell = table.Rows.get_Item(j).Cells.get_Item(k)
表格由行和單元格組成。這里采用雙層循環(huán),確保按“行 → 列”的順序讀取數(shù)據(jù),從而保持原有表格結(jié)構(gòu)。
5. 讀取單元格中的段落文本
for para in range(cell.Paragraphs.Count):
paragraphText = cell.Paragraphs.get_Item(para).Text
cellText += (paragraphText + ' ')
一個(gè)單元格中可能包含多個(gè)段落(例如手動(dòng)換行)。因此,需要遍歷 cell.Paragraphs,并將所有段落文本拼接起來(lái),確保內(nèi)容完整。
6. 拼接表格數(shù)據(jù)
tableData += cellText tableData += '\t' tableData += '\n'
- • 使用 制表符(\t) 分隔列
- • 使用 換行符(\n) 分隔行
這種格式非常適合后續(xù)轉(zhuǎn)換為 Excel、CSV,或直接導(dǎo)入數(shù)據(jù)庫(kù)。
7. 保存為文本文件
with open(f'output/Tables/WordTable_{s+1}_{i+1}.txt', 'w', encoding='utf-8') as f:
f.write(tableData)
每個(gè)表格都會(huì)被單獨(dú)保存為一個(gè)文本文件,文件名中包含 Section 和 Table 的索引,便于區(qū)分來(lái)源。
應(yīng)用場(chǎng)景拓展
基于本文示例代碼,你可以輕松擴(kuò)展到更多實(shí)際應(yīng)用場(chǎng)景,例如:
- 將提取的表格數(shù)據(jù)轉(zhuǎn)換為 CSV 或 Excel
- 自動(dòng)解析 Word 報(bào)表并導(dǎo)入 數(shù)據(jù)庫(kù)系統(tǒng)
- 批量處理合同或業(yè)務(wù)文檔中的表格信息
- 與數(shù)據(jù)分析或 BI 工具進(jìn)行對(duì)接
Spire.Doc for Python 提供的豐富 API,使這些擴(kuò)展變得非常自然。
總結(jié)
本文介紹了如何使用 Spire.Doc for Python 從 Word 文檔中自動(dòng)提取表格內(nèi)容,并將其保存為文本文件。通過(guò)對(duì) Word 文檔結(jié)構(gòu)(Section、Table、Row、Cell、Paragraph)的逐層遍歷,我們能夠完整、準(zhǔn)確地獲取表格數(shù)據(jù),并為后續(xù)的數(shù)據(jù)處理和自動(dòng)化流程打下堅(jiān)實(shí)基礎(chǔ)。
如果你正在尋找一種 穩(wěn)定、高效、無(wú)需依賴 Office 環(huán)境 的 Word 表格提取方案,那么 Spire.Doc for Python 無(wú)疑是一個(gè)值得考慮的選擇。
以上就是Python高效提取與自動(dòng)化處理Word表格的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Python Word處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Python和Tesseract實(shí)現(xiàn)驗(yàn)證碼識(shí)別功能
驗(yàn)證碼識(shí)別是一個(gè)常見(jiàn)且實(shí)用的技術(shù)需求,尤其是在自動(dòng)化測(cè)試和數(shù)據(jù)采集場(chǎng)景中,通過(guò)開(kāi)源 OCR工具 Tesseract,結(jié)合 Python 的強(qiáng)大生態(tài),我們可以高效實(shí)現(xiàn)驗(yàn)證碼識(shí)別任務(wù),本篇博客將以詳細(xì)步驟和代碼示例,介紹如何使用 Python 和 Tesseract 實(shí)現(xiàn)驗(yàn)證碼識(shí)別2025-01-01
python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解
在本文中,我們將重點(diǎn)討論一個(gè)將多個(gè)預(yù)處理操作組織成單個(gè)操作的特定函數(shù):pipe。我將通過(guò)示例方式來(lái)展示如何使用它,讓我們從數(shù)據(jù)創(chuàng)建數(shù)據(jù)幀開(kāi)始吧2021-11-11
python多線程threading.Lock鎖用法實(shí)例
這篇文章主要介紹了python多線程threading.Lock鎖用法,以實(shí)例形式對(duì)python鎖的用法進(jìn)行了較為詳細(xì)的分析,需要的朋友可以參考下2014-11-11
Python中defaultdict與lambda表達(dá)式用法實(shí)例小結(jié)
這篇文章主要介紹了Python中defaultdict與lambda表達(dá)式用法,結(jié)合實(shí)例形式分析了Python中defaultdict與lambda表達(dá)式的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-04-04
詳解python如何在django中為用戶模型添加自定義權(quán)限
這篇文章主要介紹了python如何在django中為用戶模型添加自定義權(quán)限,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python3-flask-3將信息寫入日志的實(shí)操方法
在本篇文章里小編給大家整理的是關(guān)于python3-flask-3將信息寫入日志的實(shí)操方法,有興趣的朋友們學(xué)習(xí)下。2019-11-11

