博客 / 詳情

返回

Python代碼提取Word文檔中的表格

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屬性可以幫助我們獲取一個節中的所有表格,我們可以遍歷所有節,以及節中的各個表格,並提取各個表格的文本,從而實現對錶格數據的提取。最後,將表格數據寫入到文本文件中。
以下是操作步驟:

  1. 導入所需模塊。
  2. 創建 Document 對象並用 Document.LoadFromFile() 方法載入Word文檔。
  3. 遍歷文檔的節,使用 Section.Tables 屬性獲取節中的所有表格。
  4. 遍歷各個表格,為每個表格創建字符串以儲存表格數據。
  5. 遍歷表格的各列,以及列中的各個單元格,使用 TableCell.Paragraph[].Text 屬性獲取表格數據並添加到字符串中。
  6. 將每個字符串保存為一個文本文件。
  7. 釋放資源。

代碼示例

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文件中。以下是操作步驟:

  1. 導入所需模塊。
  2. 創建 Document 對象並使用 Document.LoadFromFile() 方法載入Word文檔。
  3. 遍歷文檔的節,使用 Section.Tables 屬性獲取節中的所有表格。
  4. 遍歷各個表格,為每個表格創建一個文件名。
  5. 為每個表格打開CSV寫入工具。
  6. 將表格首行設置為表頭,並將數據寫入一個CSV文件。
  7. 釋放資源。

代碼示例

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工作簿。以下是操作步驟:

  1. 導入所需模塊。
  2. 創建 Document 對象,並使用 Document.LoadFromFile()` 方法載入Word文檔。
  3. 創建 Workbook 對象,並使用 Workbook.Worksheets.Clear() 方法清除默認工作表。
  4. 遍歷文檔中的章節,並通過 Section.Tables 屬性獲取每個章節的表格集合。
  5. 使用 Workbook.Worksheets.Add() 方法遍歷表格併為每個表格創建工作表。
  6. 遍歷每個表格中的行和每行中的單元格,通過 TableCell.Paragraphs[].Text 屬性獲取每個單元格的文本,並使用 Worksheet.SetCellValue() 方法將文本寫入工作表。
  7. 使用 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教程查看。

申請臨時許可

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.