Python读取Word文档中的Excel嵌入文件的方法详解
作者:小小明-代码实体 发布时间:2022-12-21 14:11:23
标签: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
相对来说,此方法跨平台,速度快。
来源:https://blog.csdn.net/as604049322/article/details/128308639


猜你喜欢
- 0.配置依赖环境,如果不进行这步可能会出现一些问题中间可能有多余空格,去除下再运行,一般都能安装成功,如果不能可以先更新下sudo apt-
- 本文将介绍如何使用 Vue 和第三方组件库 Element UI 实现轮播图功能。我们将从以下几个方面进行讲解:安装 Element UI创
- 目录1 作用2 安装3 所有要运行的命令都放在 manager.py 中4 三种方式 创建命令4.1 方式一 创建 Command子类4.2
- 要实现标题的功能,总共分四步:1.创建html错误页2.配置settings3.编写视图4.配置url我的开发环境:django1.10.3
- Pytorch统计参数网络参数数量def get_parameter_number(net): total_num
- 本文实例讲述了Python3.6实现连接mysql或mariadb的方法。分享给大家供大家参考,具体如下:python3.6的安装查看前面一
- 本文实例讲述了JS实现FLASH幻灯片图片切换效果的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PUB
- 今天我在练习python时,对字典里的键用sorted排序时发现并没有按照预期排序研究后发现字母大小写会影响排序首先创建一个字典,键里面的首
- 看看下面这个刚才提到的下拉列表的例子,就是将Application Object作为一个变量用来存储下拉列表的菜单项的:<%=&nbs
- 边缘检测Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞
- 代码如下:CREATE FUNCTION dbo.f_splitstr( @str varchar(8000) )RETURNS
- 众所周知,如果py文件不在当前路径,那么就不能import,因此,本文介绍如下两种有效的方法:方法1:修改环境变量,在~/.bashrc里面
- 0.前言Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但是,它
- 四种基本的函数类型局部变量 就是在函数内部定义的变量【作用域仅局限于函数内部】不同的函数 可以定义相同的局部变量,但是各自用各自的 不会产生
- 以查询前20到30条为例,主键名为id 方法一: 先正查,再反查 select top 10 * from (select top 30 *
- 如果你是一位前端开发工程师,对“跨平台”一词应该不会感到陌生。像常见的前端框架:比如React、Vue、Angular,它们可以做网页端,也
- 本文实例讲述了python采集百度百科的方法。分享给大家供大家参考。具体如下:#!/usr/bin/python# -*- coding:
- 假如读者已经熟悉了ASP 2.0,并正在寻找3.0版本中的实际改变的列表,那么将在下面发现这些信息。假如读者是一个ASP的初学者,可以越过本
- 具体代码如下所示:package mainimport ( "bufio" "io&q
- 安装好mysql后,在终端输入 mysql -u root -p 按回车,输入密码后提示access denied......ues pas