我想使用 Python 将 OLE 对象从 Excel 表中提取到 Windows 剪贴板中。
这篇文章没有进一步帮助,因为它是针对 VBA 的。而这篇文章仍然没有得到答复。
假设给定的 Excel 表(带有 ChemDraw 或 ChemSketch OLE 对象):
有一些 Python 模块可以处理 Excel 文件,openpyxl
例如xlrd
. 该模块win32clipboard
可以将数据放入剪贴板。
我的问题:
- 我看不到如何将嵌入的 OLE 对象放入剪贴板。大概,
openpyxl
和xlrd
在一起win32clipboard
不适合这个? - 有一个 Python 模块
oletools
可能可以做到,但我不明白它是如何工作的。 https://pypi.org/project/oletools/
从这个页面:
oleobj
:从 OLE 文件中提取嵌入对象。
这似乎正是我正在寻找的,但是,我找不到任何 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