我正在尝试从名为Inputs_v3的excel和名为Inputs的工作表中复制图像并保存。代码如下`
import win32com.client as win32
from PIL import ImageGrab
from xlrd import open_workbook
import os
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = open_workbook('Inputs_v3.xlsm')
r = wb.sheet_by_name('Inputs')
r.CopyPicture()
im = ImageGrab.grabclipboard()
im.save('somefile.png','PNG')
`错误如下
'Attribute error: 'Sheet' object has no attribute 'CopyPicture''
请建议我做错了。谢谢提前
答案 0 :(得分:2)
以下代码将为您提供访问Excel工作表的对象和方法所需的win32com参考:
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open('myworkbook.xlsx')
ws = wb.Worksheets('worksheet_name') # alternatively Worksheets(1) etc
现在你可以做,例如:
ws.Shapes(1).CopyPicture()
我在Windows 7上使用Python 3.4,pywin32 219和Excel 2010进行了测试。
请注意,这根本不涉及xlrd
- 这是一个无需在计算机上安装Excel即可读取Excel文件的软件包,但我不知道它是否支持从Excel工作簿获取图像或从Excel工作簿获取图像
答案 1 :(得分:1)
使用一个名为excel2img的库,您可以在一行中从任何excel文件中截取屏幕截图
导入excel2img excel2img.export_img(“ Excel文件完整路径”,“目标图像完整路径”,“ Excel SheetName”,无)
,您还可以识别特定的单元格范围。
导入excel2img excel2img.export_img(“ test.xlsx”,“ test.bmp”,“”,“ Sheet2!B2:C15”)
我希望这会有所帮助。
答案 2 :(得分:0)
在我看来,您需要包含图像的单元格位置。 尝试(请替换为单元格值):
import win32com.client as win32
from PIL import ImageGrab
from xlrd import open_workbook
import os
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = open_workbook('Inputs_v3.xlsm')
r = wb.sheet_by_name('Inputs')
r.Range(r.Cells(1,1),r.Cells(8+rows,total_length)).CopyPicture()
im = ImageGrab.grabclipboard()
im.save('somefile.png','PNG')
或者,您也可以使用图表对象:
import win32com.client as win32
from PIL import ImageGrab
from xlrd import open_workbook
import os
excel = win32.gencache.EnsureDispatch("Excel.Application")
wb = open_workbook('Inputs_v3.xlsm')
r = wb.sheet_by_name('Inputs')
for chart in r.Chartobjects():
//implement your custom logic here
chart.CopyPicture()
im = ImageGrab.grabclipboard()
im.save('somefile.png','PNG')
其他参考资料:
Python save xlPicture from clipboard