将枢纽分析表另存为图片吗?

问题描述

以下代码选择数据透视表的 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)