在实际办公和开发场景中,我们经常会遇到这样的需求:Word 文档中包含大量结构化表格数据,而最终需要将这些数据统一整理到 Excel 中进行统计、分析或二次处理。手动复制粘贴不仅效率低,而且在遇到复杂表格(如单元格内多段文本、多表格文档)时,格式也很容易被破坏。
借助 Python 脚本我们可以自动化提取 Word 文档中的所有表格,并将每个表格完整写入 Excel 的独立工作表中,在保证数据结构清晰的同时,大幅提升处理效率。
本文将详细介绍一种完整、可复用的实现方案,并对关键代码逻辑进行说明,适用于批量表格转换与自动化办公场景。
本文所使用的方法需要用到 Free Spire.Doc for Python 和 Free Spire.XLS for Python,分别用于提取 Word 表格数据和写入 Excel 文件。可通过 pip 安装:pip install spire.doc.free spire.xls.free。
一、实现思路概览
整个转换流程可以拆分为两个清晰的阶段:
从 Word 文档中提取表格数据
- 遍历文档中的所有节(Section)
- 遍历每个节中的所有表格(Table)
- 逐行、逐单元格读取文本内容
- 保留单元格内的原有段落结构
将提取的数据写入 Excel 文件
- 为每个 Word 表格创建一个新的工作表
- 按行列顺序写入单元格内容
- 自动调整列宽,提升可读性
这种“先抽象为数据结构,再写入目标文件”的方式,逻辑清晰,也便于后续扩展(例如 CSV、数据库等)。
二、使用 Python 提取 Word 中的表格数据
下面的函数负责从 Word 文档中提取所有表格,并以嵌套列表的形式返回数据。
from spire.doc 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关键说明
- Section → Table → Row → Cell 的层级结构,符合 Word 文档的真实组织方式
使用
Paragraphs而不是直接读取Text,可以:- 避免丢失单元格内的多段内容
- 保留原有换行结构,写入 Excel 后依然清晰
- 最终返回的数据是一个三层嵌套列表,非常适合后续写入表格类文件
三、将提取的数据写入 Excel 文件
在拿到结构化表格数据后,接下来使用 Spire.XLS for Python 将其写入 Excel。
from spire.xls import *
def write_data_to_excel(extracted_data, excel_file_path):
"""
将提取的 Word 表格数据写入 Excel 文件。
每个 Word 表格对应 Excel 中的一个工作表。
"""
workbook = Workbook()
# 清除默认工作表
workbook.Worksheets.Clear()
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()
workbook.SaveToFile(excel_file_path, ExcelVersion.Version2016)
workbook.Dispose()
print(f"数据已成功写入到 {excel_file_path}")实现要点
每个 Word 表格 → 一个 Excel 工作表
- 结构直观,避免数据混杂
- Excel 行列索引从
1开始,需要注意与 Python 索引的差异 AutoFitColumns()可显著提升导出后的可读性
四、完整调用示例
word_file = "input.docx"
excel_file = "output.xlsx"
extracted_data = extract_tables_from_word(word_file)
write_data_to_excel(extracted_data, excel_file)运行后,Word 文档中的所有表格将被完整转换,并按顺序写入 Excel 文件。以下是运行结果示例:
五、适用场景与扩展建议
适用场景:
- 将报告型 Word 文档中的数据统一汇总到 Excel
- 自动化处理批量合同、清单、配置表
- 作为数据清洗或分析流程的前置步骤
扩展方向:
- 批量处理多个 Word 文件
- 根据表格内容自动命名工作表
- 对 Excel 输出添加边框、样式或冻结首行
- 将中间数据结构复用于 CSV 或数据库写入
总结
通过结合 Spire.Doc for Python 与 Spire.XLS for Python,我们可以用一套清晰、稳定的 Python 方案,实现 Word 表格到 Excel 表格的自动化转换。这种方式不仅避免了手动复制的低效和错误,也为后续的数据处理和分析提供了良好的基础。
对于需要频繁处理文档表格数据的开发者和办公场景来说,这是一种非常实用、可维护性也很高的解决方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。