我想使用Python将OLE对象从Excel表提取到Windows剪贴板中
This post没有进一步的帮助,因为它是用于VBA的。 而且this post仍然没有得到答复
假设给定的Excel表格(带有ChemDraw或ChemSketch OLE对象):
有一些Python模块可以处理Excel文件,例如openpyxl
、xlrd
。
模块win32clipboard
可以将数据放入剪贴板
我的问题:
openpyxl
和xlrd
以及win32clipboard
不适合这样做李>oletools
可能可以做到,但我不理解它是如何工作的。
https://pypi.org/project/oletools/从本页:
oleobj
: to extract embedded objects from OLE files.
这似乎正是我要找的,但是,我找不到任何MCVE。不幸的是oleobj
的文档基本上被缩减为:“阅读源代码,了解自己”。如果您能给予提示和帮助,我将不胜感激
到目前为止,我的代码是:
### trying to extract OLE objects from Excel table into clipboard
from openpyxl import load_workbook
import win32clipboard as clpbd
def set_clipboard(data):
clpbd.OpenClipboard()
clpbd.EmptyClipboard()
clpbd.SetClipboardText(data) # I'm aware, this is only for text, is there anything for OLEs?
clpbd.CloseClipboard()
def print_clipboard():
clpbd.OpenClipboard()
data = clpbd.GetClipboardData()
clpbd.CloseClipboard()
print(data)
wb = load_workbook(filename = 'tbChemOLE.xlsx')
ws = wb.active
myName = ws['A3'].value # result: napthalene
myImage = ws['B3'].value # result: None
myObject = ws['C3'].value # result: None
set_clipboard(myName)
print_clipboard() # result: Naphtalene
# set_clipboard(myImage) # crash, because myImage is None
print_clipboard()
# set_clipboard(myObject) # crash, because myObject is None
print_clipboard()
wb.close()
### end of code
我构建了一个python模块来完成这项工作,请在这里查看https://pypi.org/project/AttachmentsExtractor/该模块也可以在任何操作系统上运行
安装库后,请使用以下代码段:
与此同时,我发现了this post,OP实际上不希望将OLE对象放在剪贴板上,但对我来说这很好。实际上,不需要
openpyxl
或xlrd
,但需要win32com.client
我可以获取所有OLE对象,但是,它们(可能)是按照添加顺序索引的。 所以我需要创建一个字典,行索引作为键,一组OLE对象索引和名称作为值
代码:
结果:
相关问题 更多 >
编程相关推荐