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()在某种程度上无效。有什么想法吗?
答案 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