2013-06-24 4 views
1

В настоящее время у меня есть xlPicture сохраненный в моем буфере обмена из вызова (через win32com):Python сохранить xlPicture из буфера обмена

ws.Range(ws.Cells(1,1),ws.Cells(8+rows,total_length)).CopyPicture() #Copies xlPicture to clipboard 

Теперь я хочу, чтобы сохранить изображение в моем буфере обмена в файл, так что я попытался с помощью PIL:

from PIL import ImageGrab 
    img = ImageGrab.grabclipboard() 
    img.save(os.path.join(r'C:\Windows\Temp\WS_Template_Images','test.png'),'PNG') 

Но ImageGrab.grabclipboard() возвращает None, я предполагаю, что xlPicture каким-то образом не совместимый тип для вызова. Есть ли что-нибудь, что я могу изменить, чтобы использовать ImageGrab или есть альтернативное решение полностью для сохранения xlPicture? Благодаря!

ответ

1

Оказывается, я могу добиться этого с простой работой вокруг:

ws.Range(ws.Cells(1,1),ws.Cells(8+rows,total_length)).CopyPicture()  
wb = excel.Workbooks.Add() 
ws = wb.ActiveSheet 
ws.Paste() 
ws.Shapes('Picture 1').Copy() 
img = ImageGrab.grabclipboard() 
imgFile = os.path.join(r'C:\Windows\Temp\WS_Template_Images','test.png') 
img.save(imgFile) 

Оклейка изображения в новой книге, а затем переписывание и сохранение работы, потому что таким образом данные ячейки несвязанная, и это считается Image, который теперь может получить ImageGrab.

+0

Одно предупреждение: Excel не копирует большие изображения в системный буфер обмена. Они появятся в буфере обмена Office, но вы не сможете использовать ImageGrab.grabclipboard() для них. – Vijchti