Я хотел бы использовать Python для извлечения OLE-объектов из таблицы Excel в буфер обмена Windows.
Этот пост больше не помог, поскольку он предназначен для VBA. И этот пост по-прежнему остается без ответа.
Предполагается, что данная таблица Excel (с объектами OLE ChemDraw или ChemSketch):
Существует несколько модулей 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