






















在日常办公或数据处理任务中,我们经常需要将 Word 文档里分散的表格汇总到 Excel 中进行计算或分析。面对几十页甚至上百页的文档,手动复制+粘贴不仅效率低下,且极易出现单元格错位、格式丢失等问题。本文将带你探索如何利用 Python 实现数据从 Word 到 Excel 的自动化迁移。
在处理 Word 表格导出任务时,开发者有多种选择,比如手动复制、使用 VBA 等等。我们需要根据业务场景、开发成本以及处理效果来找到最适合的:
方案对比表:
| 维度 | 手动操作 | VBA 宏 | 开源 Python 库 | Spire 系列专业组件 |
|---|---|---|---|---|
| 执行效率 | 极低 | 中 | 高 | 极高 |
| 环境依赖 | 需人工参与 | 需安装 Office | 需配置多种依赖 | 独立运行(零依赖) |
| 合并单元格支持 | 差(易乱序) | 较好 | 一般(需自行实现逻辑) | 完美支持 |
| 复杂场景适配 | 难 | 较难 | 难 | 易(API 高级封装) |
综合来看,对于追求高效率和系统稳定性的企业级开发,使用 Spire.Doc for Python 配合 Spire.XLS for Python 是当前最优的实战选型。
在开始编写脚本之前,请确保你的 Python 环境中已安装相关组件。这两个库分别负责解析 Word 的流式文档结构和构建 Excel 的行列坐标体系:
pip install Spire.Doc
pip install Spire.XLS
你可以分别安装 Word 和 Excel 组件,也可以直接安装 Spire.Office for Python,它包含了 Spire.Doc for Python,Spire.XLS for Python,Spire.Presentation for Python 和 Spire.PDF for Python。此外所有组件都提供免费版用于小项目或测试。
为了让你更清晰地理解 Spire.Doc 和 Spire.XLS 导出 Word 表格的逻辑,我们将整个实现过程拆解为以下核心步骤:
首先,我们需要在脚本开头引入 Spire 的核心模块。通过引入 spire.doc 和 spire.xls 及其通用常量模块,我们才能在 Python 中调用其封装好的文档处理引擎,从而实现对 Word DOM 树的解析和 Excel 工作簿的构建。
from spire.doc import *
from spire.doc.common import *
from spire.xls import *
from spire.xls.common import *
import os
分别创建 Document 和 Workbook 对象。随后,使用 LoadFromFile 方法加载待处理的源 Word 文档,并调用 Worksheets.Clear() 移除工作簿中默认生成的空白表,以确保输出结果不受默认工作表的干扰。
# 创建 Word 文档对象并加载文件
document = Document()
document.LoadFromFile("E:/input/项目进度.docx")
# 创建 Excel 工作簿并清空默认工作表
workbook = Workbook()
workbook.Worksheets.Clear()
Word 的数据存储具有明显的层级性(Section > Table > Row > Cell)。我们需要使用嵌套循环依次遍历文档中的 Section (节) 和 Table (表格)。对于每一个发现的表格,我们通过 workbook.Worksheets.Add() 动态创建一个工作表,并通过 sheet_index 实现自动命名,确保一表一页。
sheet_index = 0
for s in range(document.Sections.Count):
section = document.Sections.get_Item(s)
tables = section.Tables
for t in range(tables.Count):
table = tables.get_Item(t)
# 动态创建工作表并递增索引
sheet = workbook.Worksheets.Add(f"Table_{sheet_index + 1}")
# ... (后续数据提取)
sheet_index += 1
由于 Word 单元格内可能包含多个段落,所以我们需要遍历 Paragraphs 集合并手动拼接换行符 \n,以保留文本的原始换行结构。最后,通过 Style.WrapText = True 开启 Excel 的自动换行功能。
# 遍历行与列
for r in range(table.Rows.Count):
row = table.Rows.get_Item(r)
for c in range(row.Cells.Count):
cell = row.Cells.get_Item(c)
cell_text = ""
for p in range(cell.Paragraphs.Count):
paragraph = cell.Paragraphs.get_Item(p)
cell_text += paragraph.Text.strip() + "\n"
# 写入 Excel 坐标并设置换行
sheet.Range[r + 1, c + 1].Text = cell_text.strip()
sheet.Range[r + 1, c + 1].Style.WrapText = True
数据填充完成后,利用 AutoFitColumns() 和 AutoFitRows() 方法让程序自动根据内容调整列宽和行高。最后释放内存,确保系统资源回收。
将上述的步骤整合,即可得到这个高效的 Word 表格导出脚本:
from spire.doc import *
from spire.doc.common import *
from spire.xls import *
from spire.xls.common import *
import os
# 创建 Word 文档对象并加载文件
document = Document()
document.LoadFromFile("/input/项目进度.docx")
# 创建 Excel 工作簿并删除默认工作表
workbook = Workbook()
workbook.Worksheets.Clear()
# 遍历 Word 文档中的所有节
sheet_index = 0
for s in range(document.Sections.Count):
section = document.Sections.get_Item(s)
# 获取当前节中的所有表格
tables = section.Tables
for t in range(tables.Count):
# 获取当前表格
table = tables.get_Item(t)
# 新建工作表
sheet = workbook.Worksheets.Add(f"Table_{sheet_index + 1}")
# 遍历表格行
for r in range(table.Rows.Count):
row = table.Rows.get_Item(r)
# 遍历单元格
for c in range(row.Cells.Count):
cell = row.Cells.get_Item(c)
# 提取单元格中的文本
cell_text = ""
for p in range(cell.Paragraphs.Count):
paragraph = cell.Paragraphs.get_Item(p)
cell_text += paragraph.Text.strip() + "\n"
# 去除末尾换行
cell_text = cell_text.strip()
# 写入 Excel 单元格
sheet.Range[r + 1, c + 1].Text = cell_text
# 设置自动换行
sheet.Range[r + 1, c + 1].Style.WrapText = True
# 自动调整列宽行高
sheet.AllocatedRange.AutoFitColumns()
sheet.AllocatedRange.AutoFitRows()
sheet_index += 1
# 保存为 Excel 文件
workbook.SaveToFile("/output/word表格.xlsx", ExcelVersion.Version2016)
document.Close()
workbook.Dispose()
下面是原始 Word 文档与提取到的表格的对比示意图:

通过 Python 结合 Spire.Doc 与 Spire.XLS 库,我们仅需几十行代码就能解决复杂的文档数据提取难题。这种方案不仅保留了原始数据的段落结构,还通过自动化布局极大提升了结果文件的可用性。如果你正在处理大批量的文档自动化工作,不妨尝试这种更专业、更稳健的开发路径。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。