Python 将 Excel 工作表范围导出为图像

Dav*_*ang 6 python excel win32com python-imaging-library python-2.7

所以 PIL ImageGrab.grabclipboard() 似乎发生了一些奇怪的事情

import win32com.client
from PIL import ImageGrab

o = win32com.client.Dispatch('Excel.Application')
o.visible = False

wb = o.Workbooks.Open(path)
ws = wb.Worksheets['Global Dash']

ws.Range(ws.Cells(1,1),ws.Cells(66,16)).CopyPicture()  
img = ImageGrab.grabclipboard()
imgFile = os.path.join(path_to_img,'test.jpg')
img.save(imgFile)
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我注意到如果我 ctrl-V ,图像实际上正确保存在剪贴板上,但我的 img 变量返回 None ,这意味着 ImageGrab.grabclipboard() 不知何故不起作用。有任何想法吗?

小智 8

我这里有一个解决方案,希望对你有帮助。

import excel2img
excel2img.export_img("example.xlsx/example.csv","image.png/image.bmp","sheet!B2:H22")
Run Code Online (Sandbox Code Playgroud)

这对我来说非常有效。


小智 0

我刚刚尝试了问题下评论中发布的方法,它确实有效!
注意使用win32com.client.constants获取xlBitmap
另外,我的环境是Python 3.6,我没有再尝试过Python 2.7

win32c = win32com.client.constants
ws.Range(ws.Cells(1,1),ws.Cells(66,16)).CopyPicture(Format= win32c.xlBitmap)

img = ImageGrab.grabclipboard()
imgFile = os.path.join(path_to_img,'test.jpg')
img.save(imgFile)
Run Code Online (Sandbox Code Playgroud)