在日常工作中,我们经常需要处理各种格式的数据。Word文档以其灵活的排版能力,常用于报告和文档撰写,但当这些文档中包含大量表格数据时,将其用于进一步的数据分析或统计时,手动复制粘贴到Excel无疑是一项耗时且易出错的任务。想象一下,面对几十甚至上百个Word文档中的表格,这种重复性工作效率低下且令人沮丧。
幸运的是,Python作为一种强大的自动化工具,能够完美解决这一痛点。本文将深入探讨如何利用Python,结合 Spire.Doc for Python 和 Spire.XLS for Python 这两个库,高效、准确地将Word文档中的表格数据提取并转换为可编辑的Excel表格。通过自动化这一过程,您将能够显著提升工作效率,减少人为错误,并专注于更有价值的数据洞察。
环境准备与库安装
在开始之前,我们需要确保Python环境已正确配置,并安装所需的库。本文假设您已经安装了Python 3.x 版本。
首先,打开您的命令行工具(如CMD、PowerShell或Terminal),然后使用pip命令安装Spire.Doc for Python和Spire.XLS for Python。这两个库是本次任务的核心,Spire.Doc for Python负责读取和解析Word文档内容,特别是识别和提取表格数据;而Spire.XLS for Python则用于创建、写入和保存Excel文件。
pip install Spire.Doc
pip install Spire.XLS
安装完成后,您就可以在Python脚本中导入和使用它们了。
Word表格读取与数据提取
数据提取是整个转换过程的关键一步。我们将使用Spire.Doc for Python来加载Word文档,并遍历文档中的所有表格,逐一提取其内容。
以下是一个示例Word文档:
我们将编写代码来识别并提取这些数据。
from spire.doc import *
from spire.doc.common import *
def extract_tables_from_word(word_file_path):
"""
从Word文档中提取所有表格数据。
返回一个列表,其中每个元素代表一个表格,表格内部是行的列表,行内部是单元格内容的列表。
"""
document = Document()
document.LoadFromFile(word_file_path)
all_tables_data = []
# 遍历文档中的所有节
for sec_index in range(document.Sections.Count):
section = document.Sections.get_Item(sec_index)
# 遍历节中的所有表格
for table_index in range(section.Tables.Count):
table = section.Tables.get_Item(table_index)
current_table_data = []
# 遍历表格中的所有行
for row_index in range(table.Rows.Count):
table_row = table.Rows.get_Item(row_index)
current_row_data = []
# 遍历行中的所有单元格
for cell_index in range(table_row.Cells.Count):
table_cell = table_row.Cells.get_Item(cell_index)
# 提取单元格文本,并保持单元格内原有段落结构
paras = [table_cell.Paragraphs.get_Item(i).Text.rstrip('\r\n')
for i in range(table_cell.Paragraphs.Count)
if table_cell.Paragraphs.get_Item(i).Text.strip()]
current_cell_data = "\n".join(paras)
current_row_data.append(current_cell_data)
current_table_data.append(current_row_data)
all_tables_data.append(current_table_data)
document.Close()
return all_tables_data
# 假设您的Word文档名为 'input.docx' 并且在当前目录下
word_file = "input.docx"
extracted_data = extract_tables_from_word(word_file)
# 打印提取的数据以供验证
for i, table_data in enumerate(extracted_data):
print(f"--- Table {i + 1} Data ---")
for row in table_data:
print(row)
控制台输出结果:
代码解析:
Document()实例用于加载Word文档。document.LoadFromFile()方法加载指定路径的Word文档。- 我们通过
document.Sections迭代文档中的所有节,再通过section.Tables迭代每个节中的所有表格。 - 对于每个表格,我们进一步迭代
table.Rows获取行,然后迭代row.Cells获取单元格。 cell.Text.strip()用于获取单元格的纯文本内容,并移除可能存在的额外空白字符。- 所有提取的数据都存储在一个嵌套列表中,
all_tables_data是一个包含所有表格数据的列表,每个表格数据又是一个包含行数据的列表,行数据再包含单元格数据的列表。
数据写入Excel与文件保存
提取到数据后,下一步就是将其写入Excel文件。我们将使用Spire.XLS for Python来创建新的Excel工作簿,并将提取的数据逐一写入工作表。
from spire.xls import *
from spire.xls.common import *
def write_data_to_excel(extracted_data, excel_file_path):
"""
将提取的表格数据写入Excel文件。
每个Word表格将写入Excel的一个新工作表。
"""
workbook = Workbook()
# 清楚默认工作表
workbook.Worksheets.Clear()
# 如果没有提取到数据,则不创建Excel文件
if not extracted_data:
print("没有从Word文档中提取到任何表格数据。")
return
# 遍历所有提取的表格数据
for i, table_data in enumerate(extracted_data):
# 为每个表格创建一个新的工作表
sheet = workbook.Worksheets.Add(f"Table_{i + 1}")
# 将表格数据写入工作表
for r_idx, row_data in enumerate(table_data):
for c_idx, cell_value in enumerate(row_data):
# Excel的行和列索引从1开始
sheet.Range[r_idx + 1, c_idx + 1].Value = cell_value
# (可选)应用基本表格格式
# 如自动对齐列宽
sheet.AllocatedRange.AutoFitColumns()
# 保存Excel文件
workbook.SaveToFile(excel_file_path, ExcelVersion.Version2016)
workbook.Dispose()
print(f"数据已成功写入到 {excel_file_path}")
# 调用函数将数据写入Excel
excel_file = "output.xlsx"
write_data_to_excel(extracted_data, excel_file)
写入效果:
代码解析:
Workbook()实例用于创建一个新的Excel工作簿。- 我们遍历
extracted_data中的每个Word表格。 - 对于第一个表格,我们使用
workbook.Worksheets[0](默认的“Sheet1”),并为其重命名;对于后续表格,则使用workbook.Worksheets.Add()创建新的工作表。 - 然后,我们遍历每个表格的行和单元格数据,使用
sheet.Range[r_idx + 1, c_idx + 1].Value = cell_value将数据写入Excel单元格。注意,Excel的行和列索引是从1开始的,所以需要+ 1。 workbook.SaveToFile()方法将工作簿保存为指定的Excel文件,ExcelVersion.Version2016指定了保存的Excel版本。
将上述两个部分的Python代码片段整合在一起,您就拥有了一个完整的Word表格到Excel转换的自动化脚本。
总结与展望
通过本文的详细教程,我们学习了如何利用Python结合 Spire.Doc for Python 和 Spire.XLS for Python 库,实现Word文档中表格数据到Excel表格的高效自动化转换。这一过程不仅省去了繁琐的手动复制粘贴,显著提升了数据处理效率,还最大程度地减少了人为错误的可能性。
这种自动化能力在多个领域都具有广泛的应用前景,例如:
- 报告数据整合:从多个Word报告中提取关键数据,汇总到Excel进行分析。
- 企业数据迁移:将旧的Word文档中的结构化数据批量导入到新的数据库或系统。
- 日常办公自动化:简化重复性数据录入和格式转换工作,让您有更多时间专注于核心业务。