Python - Сохранить сводные таблицы Excel - PullRequest
0 голосов
/ 03 августа 2020

Я копирую существующий файл в новую книгу, а затем скрываю некоторые ненужные вкладки. Одна из вкладок, которая должна быть видимой, содержит сводную таблицу, которая после завершения сценария отображается в виде значений (вместо фактической сводной таблицы). Мне нужно «сохранить» сводную таблицу

Изменить: версия Excel 2013

Это мой код:

import xlsxwriter
import openpyxl as xl
import shutil

shutil.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 preserved

for 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 Ответ

1 голос
/ 03 августа 2020

Согласно документации , чтобы сохранить сводные таблицы, вы должны установить хотя бы одно их логическое значение pivot.cache.refreshOnLoad на True

Из-за того, что _pivots не существует на лист, если он не содержит фактическую сводную таблицу, мы можем проверить наличие сводной таблицы и установить кеш, если он найден:

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'
...