问题描述
以下代码选择数据透视表的 range 并保存为图片。如何通过名称(例如“ Pivot1”)而不是范围来选择数据透视表?
import win32com.client as win32
import sys
from pathlib import Path
import win32com.client as win32
from PIL import ImageGrab
excel_path = "C:/Prueba/GOOG-copia.xlsm"
excel = win32.dispatchEx('Excel.Application')
excel.Visible = False
excel.displayAlerts = False
wb = excel.Workbooks.Open(Filename=excel_path)
ws = wb.Worksheets('Cacaca')
win32c = win32.constants
ws.Range("A3:B8").copyPicture(Format=win32c.xlBitmap)
img = ImageGrab.grabclipboard()
image_path = 'C:/Prueba/test.png'
img.save(image_path)
excel.Quit()
解决方法
您可以使用range方法选择命名范围:
wb.Worksheets('Cacaca').Range("Pivot1").Select()
使用Win32库时,由于Win32调用倾向于映射到VBA,因此通常可以先使用VBA尝试该过程。
更新-以下是列出工作簿中所有数据透视表的代码:
# create dictionary of Pivot tables by sheet
dd = {}
ShtCnt = excel.Sheets.Count
for s in range(ShtCnt):
#print("Sheet Name:",wb.Sheets(s+1).Name)
dd[wb.Sheets(s+1).Name] = []
cnt = wb.Sheets(s+1).PivotTables().Count
for x in range(cnt):
#print(wb.Sheets(s+1).PivotTables(x+1).Name)
dd[wb.Sheets(s+1).Name].append(wb.Sheets(s+1).PivotTables(x+1).Name)
print(dd)