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

时间:2017-06-30 15:54:04

标签: python excel python-2.7 pillow win32com

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)

当我运行它时,我注意到如果我ctrl-V,图像实际上正确保存在剪贴板上,但我的img变量返回None,这意味着ImageGrab.grabclipboard()在某种程度上无效。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

在这里,我有一个可以为您提供帮助的解决方案。

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

这对我来说很好。

答案 1 :(得分: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)

答案 2 :(得分:0)

此解决方案对我有用。 尝试使用以下方式启动Excel:

o = win32com.client.gencache.EnsureDispatch("Excel.Application")

然后使用win32com.client.constants获取xlBitmap

wb = o.Workbooks.Open(workbook_file_name)
ws = wb.Worksheets("Vs. Disk or Retrofit Chart View")
ws.Range(ws.Cells(22,1),ws.Cells(62,8)).CopyPicture(Format= win32com.client.constants.xlBitmap)  
img = ImageGrab.grabclipboard()
imgFile = os.path.join(os.getcwd(),'test.jpg')
img.save(imgFile)

答案 3 :(得分:0)

要澄清Florent B.和David Yang的评论

Format中添加可选参数.CopyPicture()将使ImageGrab.getclipboard()正常工作。

以下代码将为
ws.Range(ws.Cells(1,1),ws.Cells(66,16)).CopyPicture(Format = 2)

数字2是xlBitmap,请参考https://docs.microsoft.com/en-us/office/vba/api/excel.range.copypicture