Python读取Word文档中的Excel嵌入文件的方法详解

 更新时间:2022年12月14日 08:47:07   作者:小小明-代码实体  
这篇文章主要为大家详细介绍了Python读取Word文档中的Excel嵌入文件的方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下

今天群友提出一个问题:

给出Word示例如下:

对于这种嵌入文件在Word中都属于ole文件。

下面我们假设需要读取每个嵌入的Excel文件中的python工作表中的A1单元格。

python调用宏实现

首先我们看看如何调用com接口的宏代码实现这个效果,最终完整代码如下:

from win32com import client as win32
import os

word = win32.Dispatch("Word.Application")
word.Visible = True
wdDoc = word.Documents.Open(os.path.abspath("test.docx"))
try:
    for shape in wdDoc.InlineShapes:
        if shape.Type != 1 or not shape.OLEFormat.ProgID.startswith("Excel.Sheet"):
            # 要求形状类型为wdInlineShapeEmbeddedOLEObject,是Excel类型的OLE对象
            continue
        shape.OLEFormat.Open()
        xlApp = win32.GetActiveObject('Excel.Application')
        book = xlApp.Workbooks(1)
        print([sht.Name for sht in book.Sheets])
        print(book.Sheets("python").Range("A1").Value)
        book.Close()
finally:
    wdDoc.Close()
    xlApp.Quit()
    word.Quit()

执行结果:

['java', 'forever', 'python']
python
['java', 'forever', 'python']
python hello world
['java', 'forever', 'python']
python

注意:此方法仅支持在已安装办公软件(office或WPS)的windows环境下使用。

python解析ole文件实现

我通过压缩软件看到三个Excel文件其实是以ole的bin文件形式存储:

我们也只需要理解并解析这些文件就可以得到对应的Excel文件,然后直接使用openpyxl或pandas解析。

HY.Li大佬提供了对应的代码:

思路与我的想法不谋而合,不过我不知道用olefile这个现成的库可以解析这些文件,原本还打算自己实现一下。

参考上面的代码,最终我的实现如下:

import olefile
from zipfile import ZipFile
from openpyxl import load_workbook

filename = "test.docx"
with ZipFile(filename, "r") as zip_file:
    for name in zip_file.namelist():
        if not name.startswith("word/embeddings/"):
            continue
        with zip_file.open(name) as f:
            if not olefile.isOleFile(f):
                continue
            ole = olefile.OleFileIO(f)
            try:
                book = load_workbook(ole.openstream("package"))
                print(book.sheetnames)
                print(book["python"]["A1"].value)
            except Exception as e:
                print(name, "当前ole对象不是Excel文件:", e)

结果:

['java', 'forever', 'python']
python
['java', 'forever', 'python']
python hello world
['java', 'forever', 'python']
python

相对来说,此方法跨平台,速度快。

到此这篇关于Python读取Word文档中的Excel嵌入文件的方法详解的文章就介绍到这了,更多相关Python读取Word中的Excel嵌入文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对python当中不在本路径的py文件的引用详解

    对python当中不在本路径的py文件的引用详解

    今天小编就为大家分享一篇对python当中不在本路径的py文件的引用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • pandas实现一行拆分成多行

    pandas实现一行拆分成多行

    这篇文章主要介绍了pandas实现一行拆分成多行方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 浅谈Python中range和xrange的区别

    浅谈Python中range和xrange的区别

    本篇文章主要介绍了浅谈Python中range和xrange的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • opencv锁定鼠标定位的实现

    opencv锁定鼠标定位的实现

    本文主要介绍了opencv锁定鼠标定位的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python将Dataframe格式的数据写入opengauss数据库并查询

    python将Dataframe格式的数据写入opengauss数据库并查询

    这篇文章主要介绍了python将Dataframe格式的数据写入opengauss数据库并查询,文章介绍详细具有一定的参考价值,希望对你的学习有所帮助
    2022-04-04
  • python制作微博图片爬取工具

    python制作微博图片爬取工具

    这篇文章主要介绍了python如何制作微博图片爬取工具,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • Python使用pathlib库实现优雅的处理路径

    Python使用pathlib库实现优雅的处理路径

    如果你需要在 Python 里进行文件处理,那么标准库中的os和os.path兄弟俩一定是你无法避开的两个模块,本文主要来和大家聊聊如何使用pathlib库实现优雅的处理路径,感兴趣的可以了解下
    2023-12-12
  • Python Opencv实现图片切割处理

    Python Opencv实现图片切割处理

    这篇文章主要为大家详细介绍了Python Opencv实现图片切割处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • python根据字典的键来删除元素的方法

    python根据字典的键来删除元素的方法

    在本篇文章里小编给大家整理的是一篇关于python根据字典的键来删除元素的方法,有兴趣的朋友们可以参考下。
    2020-08-08
  • python 实现selenium断言和验证的方法

    python 实现selenium断言和验证的方法

    今天小编就为大家分享一篇python 实现selenium断言和验证的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02

最新评论