Python如何提取Word文档中的表格并导出为Excel

 更新时间:2026年05月11日 08:47:44   作者:E-iceblue  
在日常办公或数据处理任务中,我们经常需要将 Word 文档里分散的表格汇总到 Excel 中进行计算或分析,面对几十页甚至上百页的文档,手动复制

在日常办公或数据处理任务中,我们经常需要将 Word 文档里分散的表格汇总到 Excel 中进行计算或分析。面对几十页甚至上百页的文档,手动复制+粘贴不仅效率低下,且极易出现单元格错位、格式丢失等问题。本文将带你探索如何利用 Python 实现数据从 Word 到 Excel 的自动化迁移。

为什么选择自动化方案?常见技术方案对比

在处理 Word 表格导出任务时,开发者有多种选择,比如手动复制、使用 VBA 等等。我们需要根据业务场景、开发成本以及处理效果来找到最适合的:

  • 手动复制粘贴:适用于处理极少量的单一表格。缺点在于无法保持长文本的段落格式,且在处理含有合并单元格的复杂表格时,数据容易发生偏移。
  • VBA (Visual Basic for Applications):Office 自带的脚本语言,可以快速将 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,它包含了 Spire.Doc for Python,Spire.XLS for Python,Spire.Presentation for Python 和 Spire.PDF for Python。此外所有组件都提供免费版用于小项目或测试。

如何构建 Python 导出表格的代码

为了让你更清晰地理解 Spire.Doc 和 Spire.XLS 导出 Word 表格的逻辑,我们将整个实现过程拆解为以下核心步骤:

1. 引入必要的类库

首先,我们需要在脚本开头引入 Spire 的核心模块。通过引入 spire.docspire.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

2. 初始化对象与加载源文件

分别创建 DocumentWorkbook 对象。随后,使用 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)。我们需要使用嵌套循环依次遍历文档中的 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

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.SaveToFile("/output/word表格.xlsx", ExcelVersion.Version2016)
document.Close()
workbook.Dispose()

下面是原始 Word 文档与提取到的表格的对比示意图:

结语

通过 Python 结合 Spire.Doc 与 Spire.XLS 库,我们仅需几十行代码就能解决复杂的文档数据提取难题。这种方案不仅保留了原始数据的段落结构,还通过自动化布局极大提升了结果文件的可用性。如果你正在处理大批量的文档自动化工作,不妨尝试这种更专业、更稳健的开发路径。

到此这篇关于Python如何提取Word文档中的表格并导出为Excel的文章就介绍到这了,更多相关Python提取Word表格并导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5中QAbstractScrollArea的详细用法教程

    PyQt5中QAbstractScrollArea的详细用法教程

    在PyQt5中,QAbstractScrollArea是一个非常重要的类,它提供了滚动区域的基本框架,允许用户通过滚动条来查看超出可视区域的内容,本文将结合具体案例,详细讲解QAbstractScrollArea的用法,需要的朋友可以参考下
    2024-08-08
  • 基于PyInstaller各参数的含义说明

    基于PyInstaller各参数的含义说明

    这篇文章主要介绍了基于PyInstaller各参数的含义说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python matplotlib库绘制散点图例题解析

    python matplotlib库绘制散点图例题解析

    这篇文章主要介绍了python matplotlib库绘制散点图例题解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Django Admin中增加导出CSV功能过程解析

    Django Admin中增加导出CSV功能过程解析

    这篇文章主要介绍了Django Admin中增加导出CSV功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 神经网络训练采用gpu设置的方式

    神经网络训练采用gpu设置的方式

    这篇文章主要介绍了神经网络训练采用gpu设置的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 解决Python3.7.0 SSL低版本导致Pip无法使用问题

    解决Python3.7.0 SSL低版本导致Pip无法使用问题

    这篇文章主要介绍了解决Python3.7.0 SSL低版本导致Pip无法使用问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Python中的breakpoint方法使用小结

    Python中的breakpoint方法使用小结

    breakpoint 是 Python 3.7 及以后版本中一个非常有用的内置函数,本文主要介绍了Python中的breakpoint方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • OpenCV+MediaPipe实现手部关键点识别

    OpenCV+MediaPipe实现手部关键点识别

    这篇文章主要介绍了如何通过OpenCV MediaPipe实现手部关键点识别,文中的示例代码讲解详细,对我们学习或工作有一定的价值,需要的可以参考一下
    2022-01-01
  • Python 实现随机数详解及实例代码

    Python 实现随机数详解及实例代码

    这篇文章主要介绍了Python 实现随机数详解及实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • Python微信自动化库使用详解

    Python微信自动化库使用详解

    Python微信自动化是指使用Python编程语言来实现对微信的自动化操作,在Python中,有几个库可以用于微信自动化操作,包括itchat、wxpy、wechatpy和wxauto,以下是对这些库的详细介绍,需要的朋友可以参考下
    2025-03-03

最新评论