Python如何提取Word文档中的表格并导出为Excel
手动提取Word表格效率低且易出错。Python自动化方案中,Spire系列组件因其独立运行、完美支持合并单元格及API封装良好等优势,成为高效稳定的选择。通过引入相应库并编写脚本,可自动遍历文档结构、提取单元格文本与格式,最终导出为布局优化的Excel文件,实现批量处理。
在日常办公或处理数据时,我们常常需要把Word文档里的表格汇总到Excel里进行计算或分析。面对几十页甚至上百页的文档,手动复制粘贴不仅效率低下,还很容易出现单元格错位、格式丢失的问题。有没有一种方法,能让我们彻底告别这种重复劳动呢?答案是肯定的。本文将带你探索如何利用Python,实现数据从Word到Excel的自动化迁移,让繁琐的工作一键完成。
为什么选择自动化方案?常见技术方案对比
面对Word表格导出的需求,开发者其实有多种选择,比如手动操作、使用VBA等等。但哪种才是最适合你的呢?这得从业务场景、开发成本和处理效果几个维度来综合考量。
- 手动复制粘贴:只适用于处理极少量、结构单一的表格。它的短板很明显:无法保持长文本的段落格式,一旦遇到合并单元格等复杂结构,数据很容易“跑偏”。
- VBA (Visual Basic for Applications):作为Office自带的脚本语言,VBA能快速导出Word表格。但它语法相对陈旧,调试起来比较麻烦。更重要的是,它高度依赖Microsoft Office环境,在没有安装Office的服务器或Linux系统上就无法运行,设备局限性较大。
- 开源Python库(如python-docx):这类工具灵活性很高,但“能力越大,责任越大”。在处理嵌套表格、复杂的行列跨度映射时,往往需要开发者编写大量的底层逻辑代码,开发成本不低,对编程知识有一定要求。
- 专业类库(Spire系列组件):这类工具功能强大,API设计得简单易懂。其核心优势在于独立性(无需安装Office)和高集成度。它将复杂的Word文档对象模型(DOM)解析与Excel坐标转换都封装好了,开发者通过简单的API调用,就能精准保留原文的逻辑结构和文本格式。
方案对比表:
| 维度 | 手动操作 | 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,它包含了文档、表格、演示文稿和PDF处理的全家桶。另外,所有组件都提供免费版本,方便小项目测试或学习使用。
如何构建 Python 导出表格的代码
为了让你更清晰地理解整个导出逻辑,我们可以把实现过程拆解成以下几个核心步骤,一步步来看。
1. 引入必要的类库
万事开头先“引包”。在脚本的开头,我们需要引入Spire的核心模块。只有引入了spire.doc和spire.xls及其通用常量,才能在Python中调用它们封装好的文档处理引擎,从而实现对Word文档树的解析和Excel工作簿的构建。
from spire.doc import * from spire.doc.common import * from spire.xls import * from spire.xls.common import * import os
2. 初始化对象与加载源文件
接下来,分别创建Document和Workbook对象。然后,使用LoadFromFile方法加载需要处理的Word源文档。同时,调用Worksheets.Clear()清空工作簿里默认生成的空白工作表,确保最终的输出结果干净、不受干扰。
# 创建 Word 文档对象并加载文件
document = Document()
document.LoadFromFile("E:/input/项目进度.docx")
# 创建 Excel 工作簿并清空默认工作表
workbook = Workbook()
workbook.Worksheets.Clear()
3. 遍历 Word 文档多层级结构
Word文档的数据存储具有典型的层级结构:节(Section)包含表格(Table),表格包含行(Row),行包含单元格(Cell)。我们需要用嵌套循环来依次遍历文档中的每一个节和每一个表格。每发现一个表格,就通过workbook.Worksheets.Add()动态创建一个新的Excel工作表,并用一个递增的索引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
4. 提取单元格文本与格式映射
这里有个细节需要注意: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
5. 自动化布局优化与资源释放
数据填充完成后,利用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.Sa veToFile("/output/word表格.xlsx", ExcelVersion.Version2016)
document.Close()
workbook.Dispose()
为了更直观地展示效果,下图对比了原始Word文档与提取后生成的Excel表格:

结语
通过Python结合Spire.Doc与Spire.XLS库,我们仅用几十行代码就解决了复杂的文档数据提取难题。这种方案不仅完美保留了原始数据的段落和结构,还通过自动化布局显著提升了结果文件的可用性和美观度。如果你正被大批量的文档自动化处理工作所困扰,那么,这条更专业、更稳健的开发路径,值得你尝试。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















