Python: обновить сводные таблицы на рабочем листе

Я создаю скрипт python, который позволит мне открыть лист Excel 2010 и распечатать его.

Я получил большую часть пути

import win32com.client office = win32com.client.Dispatch("Excel.Application") wb = office.Workbooks.Open(r"path\to\excel\file\to\print.xlsm") count = wb.Sheets.Count for i in range(count): ws = wb.Worksheets[i] pivotCount = ws.PivotTables().Count for j in range(1, pivotCount+1): #TODO code to refresh each pivot table ws.PrintOut() print "Worksheet: %s - has been sent to the printer" % (ws.Name) 

Как вы можете видеть, мне все еще не хватает обновления сводных таблиц на листе.

Код VBA для обновления:

 ActiveSheet.PivotTables(1).PivotCache.Refresh 

Я не могу разбить код на синтаксис python win32com. Самое близкое, что я получил:

 wb.WorkSheets(5).PivotTables(1).PivotCache.Refresh 

который дает <bound method CDispatch.Refresh of <COMObject PivotCache>> но не приводит к <bound method CDispatch.Refresh of <COMObject PivotCache>> листу.

Любая помощь будет высоко оценен!

РЕШЕНИЕ

Я в конечном итоге нашел решение самостоятельно, но буду держать пост, чтобы он мог помочь всем программистам с аналогичной проблемой.

 import win32com.client office = win32com.client.Dispatch("Excel.Application") wb = office.Workbooks.Open(r"path\to\excel\file\to\print.xlsm") count = wb.Sheets.Count for i in range(count): ws = wb.Worksheets[i] ws.Unprotect() # IF protected pivotCount = ws.PivotTables().Count for j in range(1, pivotCount+1): ws.PivotTables(j).PivotCache().Refresh() # Put protection back on ws.Protect(DrawingObjects=True, Contents=True, Scenarios=True, AllowUsingPivotTables=True) ws.PrintOut() print "Worksheet: %s - has been sent to the printer" % (ws.Name) 

Не забудьте проголосовать, если хотите или использовали код.

Python - лучший язык программирования в мире.