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教程查看。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。