我正在將現(xiàn)有文件復(fù)制到新工作簿中,然后隱藏一些不必要的選項卡。需要可見的選項卡之一包含一個數(shù)據(jù)透視表,該數(shù)據(jù)透視表在腳本完成后顯示為值(而不是實際的數(shù)據(jù)透視表)。我需要“保留”數(shù)據(jù)透視表編輯:Excel 2013版本這是我的代碼:import xlsxwriterimport openpyxl as xlimport shutilshutil.copy('C:/Prueba/GOOG.xlsm', 'C:/Prueba/GOOG-copia.xlsm')workbook = xl.load_workbook('C:/Prueba/GOOG-copia.xlsm', keep_vba = 'True')keep = ['Cacaca','Sheet1'] # Cacaca contains a pivot table that needs to be preservedfor i in workbook.sheetnames: if i in keep: pivot = workbook[i]._pivots[0] pivot.cache.refreshOnLoad = True workbook[i].sheet_state = 'visible' else: workbook[i].sheet_state = 'hidden'workbook.save('C:/Prueba/GOOG-copia.xlsm')workbook.close錯誤:AttributeError: 'Worksheet' object has no attribute '_pivots'
1 回答

眼眸繁星
TA貢獻1873條經(jīng)驗 獲得超9個贊
根據(jù)保存數(shù)據(jù)透視表的文檔,您必須至少將它們的一個布爾值設(shè)置pivot.cache.refreshOnLoad
為True
由于_pivots
不存在于工作表上,除非它包含一個實際的數(shù)據(jù)透視表,我們可以檢查數(shù)據(jù)透視表并在找到時設(shè)置緩存:
for i in workbook.sheetnames:
? ? if i in keep:
? ? ? ? ws = workbook[i]
? ? ? ? if hasattr(ws, "_pivots"):
? ? ? ? ? ? pivot = ws._pivots[0]
? ? ? ? ? ? pivot.cache.refreshOnLoad = True
? ? ? ? workbook[i].sheet_state = 'visible'
? ? else:
? ? ? ? workbook[i].sheet_state = 'hidden'
添加回答
舉報
0/150
提交
取消