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教程查看。

申请临时许可


大丸子
12 声望3 粉丝