Word文檔作為最廣泛應用的文字處理工具之一,承載着海量的數據與信息,其中表格以其結構化的特性,成為展現對比分析、統計彙總等內容的重要形式。然而,在數據分析、自動化報告生成等應用場景中,將這些Word文檔中的表格數據有效提取並進一步利用,成為了提高工作效率、實現信息快速流轉的關鍵環節。而功能豐富且簡單方便的Python能夠幫助我們實現Word文檔中表格數據提取的自動話,簡化手動複製粘貼的繁瑣工作,無縫對接後續的數據處理與分析流程。本文將演示如何使用Python代碼高效提取Word文檔表格,並寫入其他格式的文件,如文本文件、CSV文件以及Excel工作表。
- 提取Word文檔表格寫入文本文件
- 提取Word文檔表格寫入CSV文件
- 提取Word文檔表格寫入Excel工作表
本文所使用的方法基於Spire.Doc for Python庫,PyPI:pip install Spire.Doc。
提取Word文檔表格寫入文本文件
庫中的Section.Tables屬性可以幫助我們獲取一個節中的所有表格,我們可以遍歷所有節,以及節中的各個表格,並提取各個表格的文本,從而實現對錶格數據的提取。最後,將表格數據寫入到文本文件中。
以下是操作步驟:
- 導入所需模塊。
- 創建
Document對象並用Document.LoadFromFile()方法載入Word文檔。 - 遍歷文檔的節,使用
Section.Tables屬性獲取節中的所有表格。 - 遍歷各個表格,為每個表格創建字符串以儲存表格數據。
- 遍歷表格的各列,以及列中的各個單元格,使用
TableCell.Paragraph[].Text屬性獲取表格數據並添加到字符串中。 - 將每個字符串保存為一個文本文件。
- 釋放資源。
代碼示例
from spire.doc import *
from spire.doc.common import *
# 創建一個 Document 實例
doc = Document()
# 加載一個 Word 文檔
doc.LoadFromFile("示例.docx")
# 遍歷各個節
for s in range(doc.Sections.Count):
# 獲取一個節
section = doc.Sections.get_Item(s)
# 獲取節中的表格
tables = section.Tables
# 遍歷表格
for i in range(0, tables.Count):
# 獲取一個表格
table = tables.get_Item(i)
# 初始化一個字符串來存儲表格數據
tableData = ''
# 遍歷表格的行
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)
# 獲取單元格中的文本
cellText = ''
for para in range(cell.Paragraphs.Count):
paragraphText = cell.Paragraphs.get_Item(para).Text
cellText += (paragraphText + ' ')
# 將文本添加到字符串中
tableData += cellText
if k < table.Rows.get_Item(j).Cells.Count - 1:
tableData += '\t'
# 添加一個換行符
tableData += '\n'
# 將表格數據保存到文本文件中
with open(f'output/Tables/WordTable_{s+1}_{i+1}.txt', 'w', encoding='utf-8') as f:
f.write(tableData)
doc.Close()
Word文檔
提取的數據
提取Word文檔表格寫入CSV文件
讀取Word文檔中的表格數據後,我們還可以通過標準庫中的csv來將表格數據寫入到CSV文件中。以下是操作步驟:
- 導入所需模塊。
- 創建
Document對象並使用Document.LoadFromFile()方法載入Word文檔。 - 遍歷文檔的節,使用
Section.Tables屬性獲取節中的所有表格。 - 遍歷各個表格,為每個表格創建一個文件名。
- 為每個表格打開CSV寫入工具。
- 將表格首行設置為表頭,並將數據寫入一個CSV文件。
- 釋放資源。
代碼示例
import csv
from spire.doc import *
from spire.doc.common import *
# 創建一個 Document 實例
doc = Document()
# 加載一個 Word 文檔
doc.LoadFromFile('示例.docx')
# 處理文檔中的每個表格
for i in range(doc.Sections.Count):
for j in range(doc.Sections.get_Item(i).Tables.Count):
# 獲取表格並創建基於其位置的文件名
table = doc.Sections.get_Item(i).Tables.get_Item(j)
filename = f'output/Tables/Table_{i+1}_{j+1}.csv'
# 打開一個 CSV writer 用於表格
with open(filename, mode='w', newline='', encoding='utf-8') as csvfile:
fieldnames = []
writer = csv.writer(csvfile)
# 將第一行設置為表頭
if not fieldnames:
header_row = table.Rows.get_Item(0)
for k in range(header_row.Cells.Count):
fieldnames.append(header_row.Cells.get_Item(k).FirstParagraph.Text)
writer.writerow(fieldnames)
# 將表格數據寫入 CSV
for row in range(1, table.Rows.Count): # 從第二行開始(跳過表頭)
row_data = []
for l in range(table.Rows.get_Item(row).Cells.Count):
row_data.append(table.Rows.get_Item(row).Cells.get_Item(l).FirstParagraph.Text)
writer.writerow(row_data)
# 關閉文檔
doc.Close()
提取的CSV文件
提取Word文檔表格寫入Excel工作表
我們還可以利用Spire.XLS for Python(PyPI:pip install Spire.XLS)將提取的表格儲存到Excel工作簿。以下是操作步驟:
- 導入所需模塊。
- 創建
Document 對象,並使用Document.LoadFromFile()` 方法載入Word文檔。 - 創建
Workbook對象,並使用Workbook.Worksheets.Clear()方法清除默認工作表。 - 遍歷文檔中的章節,並通過
Section.Tables屬性獲取每個章節的表格集合。 - 使用
Workbook.Worksheets.Add()方法遍歷表格併為每個表格創建工作表。 - 遍歷每個表格中的行和每行中的單元格,通過
TableCell.Paragraphs[].Text屬性獲取每個單元格的文本,並使用Worksheet.SetCellValue()方法將文本寫入工作表。 - 使用
Workbook.SaveToFile()方法保存工作簿。
代碼示例
from spire.doc import *
from spire.doc.common import *
from spire.xls import *
from spire.xls.common import *
# 創建一個 Document 實例
doc = Document()
# 加載一個 Word 文檔
doc.LoadFromFile('Sample.docx')
# 創建一個 Workbook 實例
wb = Workbook()
wb.Worksheets.Clear()
# 遍歷文檔中的節
for i in range(doc.Sections.Count):
# 獲取一個節
section = doc.Sections.get_Item(i)
# 遍歷節中的表格
for j in range(section.Tables.Count):
# 獲取一個表格
table = section.Tables.get_Item(j)
# 創建一個工作表
ws = wb.Worksheets.Add(f'Table_{i+1}_{j+1}')
# 將表格寫入工作表
for row in range(table.Rows.Count):
# 獲取一行
tableRow = table.Rows.get_Item(row)
# 遍歷行中的單元格
for cell in range(tableRow.Cells.Count):
# 獲取一個單元格
tableCell = tableRow.Cells.get_Item(cell)
# 獲取單元格中的文本
cellText = ''
for paragraph in range(tableCell.Paragraphs.Count):
paragraph = tableCell.Paragraphs.get_Item(paragraph)
cellText = cellText + (paragraph.Text + ' ')
# 將單元格文本寫入工作表
ws.SetCellValue(row + 1, cell + 1, cellText)
# 保存工作簿
wb.SaveToFile('output/Tables/WordTableToExcel.xlsx', FileFormat.Version2016)
doc.Close()
wb.Dispose()
提取的Excel工作簿
本文介紹瞭如何使用Spire.Doc for Python提取Word文檔中的表格,並寫入文本、CSV以及Excel工作簿等其他格式的文件。
更多Word文檔操作技巧請前往Spire.Doc for Python教程查看。
申請臨時許可