Python提取Word表格数据的详细教程

 更新时间:2025年07月06日 10:17:07   作者:盹猫  
最近由于工作上的需要,需要使用Python完成DOC文档格式数据的读取和修改工作,所以本篇文章就是记录使用LibreOffice+python-docx完成doc文档内表格的转换和修改的,需要的朋友可以参考下

一、编写目的

最近由于工作上的需要,需要使用Python完成DOC文档格式数据的读取和修改工作,但通过查阅相关资料,直接对DOC文档进行读取和修改没有相关的依赖(主要为doc文件为较早的windows系统支持格式),需要将DOC文件转换为.docx格式,为什么是docx格式?

  • .docx 是 XML 格式,通常无编码问题​​,但若从其他格式转换可能出错。
  • python-docx依赖库可以直接对docx文档格式进行操作,但无法对doc格式进行操作。

那么问题就转变为如何将doc格式转换为.docx格式的问题,有下面的解决方法:

  • 如果你在windows系统上且安装有Microsoft Word 可以使用pywin32调用Word提供的COM口进行格式转换。

那如果就不想花钱或者安装Word,或者我使用的是其它系统(如Linux系统)又该如何转换doc格式到.docx格式呢?

这里也找到了相关的软件支持:LibreOffice。它提供了和Word几乎相同的功能,但其为免费开源的,并且可以通过命令行进行调用,最重要的可以多系统支持。

本篇文章就是记录使用LibreOffice+python-docx完成doc文档内表格的转换和修改的。

二、环境准备

1、安装LibreOffice

如果是Windows系统可以官网下载LibreOffice的.exe安装包,然后就是不断地下一步即可。

如果是Linux系统可以通过下面的命令进行安装:

Ubuntu/Debian​​:

sudo apt update && sudo apt install libreoffice

 ​Fedora​​:

sudo dnf install libreoffice

​openSUSE​​:

sudo zypper install libreoffice

安装完成后,可以在命令行中进行版本验证:

soffice --version

如果输出下述内容则表明安装成功:

LibreOffice 25.2.3.2 bbb074479178df812d175f709636b368952c2ce3

2、安装python-docx

 在已有的python环境下安装python-docx可以使用以下命令:

pip install python-docx

三、代码实现

1、转换成docx

 根据上面的步骤,先进行doc到docx的转换,我们可以使用以下命令进行转换:

soffice --headless --convert-to <目标格式> <输入文件> [--outdir <输出目录>]

 当然这里需要再Python中进行命令行的调用,直接上代码:

import os
import subprocess
import re

def convert_doc_to_docx(doc_path, output_dir, soffice_path=None):
    """
    使用 LibreOffice 将 .doc 转换为 .docx
    :param doc_path: .doc 文件路径
    :param output_dir: 输出目录(默认当前目录)
    :param soffice_path: LibreOffice 的 soffice.exe 完整路径(可选)
    :return: 转换后的 .docx 文件路径
    """
    if not doc_path.lower().endswith('.doc'):
        raise ValueError("输入文件必须是 .doc 格式")

    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    # 构造输出路径
    base_name = os.path.splitext(os.path.basename(doc_path))[0]
    docx_path = os.path.join(output_dir, f"{base_name}.docx")

    # 检查 LibreOffice 是否安装
    if soffice_path is None:
        try:
            # 尝试调用 soffice 命令
            subprocess.run(["soffice", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            soffice_cmd = ["soffice"]
        except FileNotFoundError:
            raise RuntimeError("LibreOffice 未安装或未添加到系统 PATH 中。请确保 LibreOffice 已正确安装并在 PATH 中,或提供 soffice.exe 的完整路径。")
    else:
        soffice_cmd = [soffice_path]

    # 使用 LibreOffice 转换
    try:
        subprocess.run(
            soffice_cmd + ["--headless","--nodefault","--nologo", "--convert-to", "docx", "--outdir", output_dir, doc_path],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        if not os.path.exists(docx_path):
            raise RuntimeError(f"转换失败,未找到输出文件: {docx_path}")
        return docx_path
    except subprocess.CalledProcessError as e:
        error_msg = f"转换失败: {e.stderr.decode()}"
        raise RuntimeError(error_msg)

在上面的代码中先进行LibreOffice环境是否安装的检测,然后调用命令行进行目标文件的转换,转换完成的文件放到output_dir目录下。

2、读取和修改

转换成docx文件后就可以使用python-docx依赖对数据进行操作了,下面的Python代码实现了docx文档内表格的读取:

from docx import Document

def read_docx_tables(docx_path):
    """
    使用 python-docx 读取 .docx 文件中的表格
    :param docx_path: .docx 文件路径
    :return: 表格数据列表(每行是一个列表)
    """
    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"无法读取 .docx 文件: {e}")

    tables_data = []

    for i, table in enumerate(doc.tables):
        print(f"\n表格 {i + 1}:")
        table_data = []
        for row_idx, row in enumerate(table.rows):
            row_data = [cell.text.strip() for cell in row.cells]
            # 清理单元格中的特殊字符
            row_data = [clean_text(cell) for cell in row_data]
            table_data.append(row_data)
            print(row_data)
        tables_data.append(table_data)

    return tables_data

 修改起来也是非常方便的,只需要在更新row.cells[索引].text后,执行一下doc.save(docx_path)的操作,代码如下:

from docx import Document

def modify_docx_tables(docx_path, output_path=None, modify_func=None):
    """
    仅修改 .docx 文件中的表格数据(不读取原有数据)
    
    :param docx_path: 输入的 .docx 文件路径
    :param output_path: 输出的 .docx 文件路径(如果为 None,则覆盖原文件)
    :param modify_func: 修改表格数据的函数(接收 table 并直接修改)
    """
    if output_path is None:
        output_path = docx_path  # 默认覆盖原文件

    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"无法读取 .docx 文件: {e}")

    for i, table in enumerate(doc.tables):
        print(f"\n修改表格 {i + 1}:")
        
        """
        示例修改函数:将所有单元格内容改为 "MODIFIED"
        """
        for row in table.rows:
            for cell in row.cells:
                cell.text = "MODIFIED"  # 直接修改单元格内容

    # 保存修改后的文档
    doc.save(output_path)
    print(f"\n表格数据已修改并保存到: {output_path}")


四、总结

上面就是对doc格式的文档表格的读取和修改操作的全部内容了,虽然doc文件格式比较落后,但不可避免的有些公司可能有些比较古老的系统,在日常生产中就使用到doc文件格式,如果你有这方面的需求,希望这篇文章能帮助到你。

以上就是Python提取Word表格数据的详细教程的详细内容,更多关于Python提取Word表格数据的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Python搭建虚拟环境的配置方法

    使用Python搭建虚拟环境的配置方法

    python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。这篇文章主要介绍了使用Python虚拟环境,需要的朋友可以参考下
    2018-02-02
  • Python读取Windows和Linux的CPU、GPU、硬盘等部件温度的读取方法

    Python读取Windows和Linux的CPU、GPU、硬盘等部件温度的读取方法

    本文详细介绍了如何使用Python在Windows和Linux系统上通过OpenHardwareMonitor和psutil库读取CPU、GPU等部件的温度,包括Windows下的两种方法以及Linux下的简单实现,感兴趣的小伙伴跟着小编一起来看看吧
    2025-02-02
  • python 时间 T 去掉 带上ms 毫秒 时间格式的操作

    python 时间 T 去掉 带上ms 毫秒 时间格式的操作

    这篇文章主要介绍了python 时间 T 去掉 带上ms 毫秒 时间格式的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python下调用Linux的Shell命令的方法

    Python下调用Linux的Shell命令的方法

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,这篇文章主要介绍了Python下调用Linux的Shell命令的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例

    Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例

    这篇文章主要介绍了Python3.4实现从HTTP代理网站批量获取代理并筛选的方法,涉及Python网络连接、读取、判断等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Python中的面向对象编程详解(上)

    Python中的面向对象编程详解(上)

    这篇文章主要介绍了Python中的面向对象编程详解(上),本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容,需要的朋友可以参考下
    2015-04-04
  • python区块链创建多个交易教程

    python区块链创建多个交易教程

    这篇文章主要为大家介绍了python区块链创建多个交易的实现示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • yolov5 win10 CPU与GPU环境搭建过程

    yolov5 win10 CPU与GPU环境搭建过程

    这篇文章主要介绍了yolov5 win10 CPU与GPU环境搭建过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Python的图像处理库Pillow安装与使用教程

    Python的图像处理库Pillow安装与使用教程

    Pillow库是Python中用于图像处理的开源库,提供了丰富的图像处理功能,如图像读取、保存、裁剪、调整大小、旋转、添加文字等,这篇文章主要给大家介绍了关于Python的图像处理库Pillow安装与使用的相关资料,需要的朋友可以参考下
    2024-04-04
  • Python2.5/2.6实用教程 入门基础篇

    Python2.5/2.6实用教程 入门基础篇

    本文方便有经验的程序员进入Python世界.本文适用于python2.5/2.6版本.
    2009-11-11

最新评论