python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python提取Word表格并导出

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

作者:E-iceblue

在日常办公或数据处理任务中,我们经常需要将 Word 文档里分散的表格汇总到 Excel 中进行计算或分析,面对几十页甚至上百页的文档,手动复制

在日常办公或数据处理任务中,我们经常需要将 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。此外所有组件都提供免费版用于小项目或测试。

如何构建 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表格并导出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文