Python高效提取與自動(dòng)化處理Word表格的完整指南
在日常辦公和自動(dòng)化處理場(chǎng)景中,Word 文檔(DOC/DOCX)依然是最常見的數(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ù)庫、轉(zhuǎn)換為 Excel、生成報(bào)表或進(jìn)行數(shù)據(jù)分析)時(shí),手動(dòng)復(fù)制粘貼顯然效率低下,也容易出錯(cuò)。
借助 Python 以及專業(yè)的文檔處理庫,我們可以實(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 是一款面向開發(fā)者的專業(yè) Word 文檔處理庫,具備以下顯著優(yōu)勢(shì):
- 無需依賴 Microsoft Word :純 Python 實(shí)現(xiàn),適合服務(wù)器和自動(dòng)化環(huán)境
- 支持完整 Word 結(jié)構(gòu) :段落、表格、頁眉頁腳、樣式等均可訪問
- 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ù)庫導(dǎo)入邏輯。
準(zhǔn)備工作
在開始之前,請(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 組成(例如分頁、不同頁眉頁腳設(shè)置)。為了不遺漏任何表格,我們需要遍歷所有 Section。
3. 獲取并遍歷表格
tables = section.Tables
for i in range(0, tables.Count):
table = tables.get_Item(i)
每個(gè) Section 都可能包含多個(gè)表格。通過 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,并將所有段落文本拼接起來,確保內(nèi)容完整。
6. 拼接表格數(shù)據(jù)
tableData += cellText tableData += '\t' tableData += '\n'
- • 使用 制表符(\t) 分隔列
- • 使用 換行符(\n) 分隔行
這種格式非常適合后續(xù)轉(zhuǎn)換為 Excel、CSV,或直接導(dǎo)入數(shù)據(jù)庫。
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ū)分來源。
應(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ù)庫系統(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)容,并將其保存為文本文件。通過對(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)定、高效、無需依賴 Office 環(huán)境 的 Word 表格提取方案,那么 Spire.Doc for Python 無疑是一個(gè)值得考慮的選擇。
以上就是Python高效提取與自動(dòng)化處理Word表格的完整指南的詳細(xì)內(nèi)容,更多關(guān)于Python Word處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)計(jì)算倒數(shù)的方法
這篇文章主要介紹了python實(shí)現(xiàn)計(jì)算倒數(shù)的方法,涉及Python針對(duì)數(shù)學(xué)運(yùn)算操作的相關(guān)技巧,需要的朋友可以參考下2015-07-07
計(jì)算機(jī)二級(jí)python學(xué)習(xí)教程(2) python語言基本語法元素
這篇文章主要為大家詳細(xì)介紹了計(jì)算機(jī)二級(jí)python學(xué)習(xí)教程的第2篇,Python語言基本語法元素,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)
這篇文章主要介紹了用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Python FTP文件定時(shí)自動(dòng)下載實(shí)現(xiàn)過程解析
這篇文章主要介紹了Python FTP文件定時(shí)自動(dòng)下載實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
詳解PyCharm使用pyQT5進(jìn)行GUI開發(fā)的基本流程
本文主要介紹了PyCharm使用pyQT5進(jìn)行GUI開發(fā)的基本流程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
Python pyinotify日志監(jiān)控系統(tǒng)處理日志的方法
這篇文章主要介紹了Python pyinotify日志監(jiān)控系統(tǒng)處理日志的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
使用rst2pdf實(shí)現(xiàn)將sphinx生成PDF
這篇文章主要介紹了使用rst2pdf實(shí)現(xiàn)將sphinx生成PDF的相關(guān)資料,以及使用過程用遇到的錯(cuò)誤的處理方法,非常的全面,需要的朋友可以參考下2016-06-06

