使用 Python 导出 Word 表格为 Excel 工作表
在实际办公和开发场景中,我们经常会遇到这样的需求:Word 文档中包含大量结构化表格数据,而最终需要将这些数据统一整理到 Excel 中进行统计、分析或二次处理。手动复制粘贴不仅效率低,而且在遇到复杂表格(如单元格内多段文本、多表格文档)时,格式也很容易被破坏。 借助 Python 脚本我们可以自动化提取 Word 文档中的所有表格,并将每个表格完整写入 Excel 的独立工作表中,在保证数据结构清晰的同时,大幅提升处理效率。 本文将详细介绍一种完整、可复用的实现方案,并对关键代码逻辑进行说明,适用于批量表格转换与自动化办公场景。 本文所使用的方法需要用到 Free Spire.Doc for Python 和 Free Spire.XLS for Python,分别用于提取 Word 表格数据和写入 Excel 文件。可通过 pip 安装: 整个转换流程可以拆分为两个清晰的阶段: 从 Word 文档中提取表格数据 将提取的数据写入 Excel 文件 这种“先抽象为数据结构,再写入目标文件”的方式,逻辑清晰,也便于后续扩展(例如 CSV、数据库等)。 下面的函数负责从 Word 文档中提取所有表格,并以嵌套列表的形式返回数据。 使用 在拿到结构化表格数据后,接下来使用 Spire.XLS for Python 将其写入 Excel。 每个 Word 表格 → 一个 Excel 工作表 运行后,Word 文档中的所有表格将被完整转换,并按顺序写入 Excel 文件。以下是运行结果示例: 适用场景: 扩展方向: 通过结合 Spire.Doc for Python 与 Spire.XLS for Python,我们可以用一套清晰、稳定的 Python 方案,实现 Word 表格到 Excel 表格的自动化转换。这种方式不仅避免了手动复制的低效和错误,也为后续的数据处理和分析提供了良好的基础。 对于需要频繁处理文档表格数据的开发者和办公场景来说,这是一种非常实用、可维护性也很高的解决方案。pip install spire.doc.free spire.xls.free。一、实现思路概览
二、使用 Python 提取 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关键说明
Paragraphs 而不是直接读取 Text,可以:三、将提取的数据写入 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}")实现要点
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)
五、适用场景与扩展建议
总结