Как сохранить файл excel с помощью openpyxl и сохранить сводную таблицу как есть?

#python #excel #pivot-table #openpyxl

Вопрос:

У меня есть файл excel — один лист используется для записи данных с помощью python, другой лист содержит сводную таблицу. Я хочу, чтобы сводная таблица была точно такой же, как исходный файл.

Проблема в том, что после сохранения новой книги с помощью openpyxl я открываю файл excel и обновляю сводную таблицу, она теряет флажок «Настройки полей..» — > «Повторять метки элементов», и мне нужно каждый раз включать его вручную. Это не очень эффективно, я бы предпочел решить эту проблему с помощью python. Пример файла проверен, но флажок, похоже, исчезает после сохранения нового файла с помощью openpyxl.

Изображение из книги Excel

 from openpyxl import load_workbook
from pathlib import Path
from datetime import date
import os

sample_file_path = Path('sample_excel.xlsx')   # source excel
result_folder_path = Path('results')

wb = load_workbook(sample_file_path)
ws = wb["t_mm"]  # worksheet with pivot table I want to preserve as is

# some manipulations to other worksheet 

xlsx_filename = "test_my_file_%s.xlsx" % date.today().strftime('%d%m%Y')
completename = os.path.join(result_folder_path, xlsx_filename)
wb.save(completename)
 

Я прочитал документацию https://openpyxl.readthedocs.io/en/stable/api/openpyxl.pivot.table.html, но не мог понять, как сохранить этот флажок. Я не эксперт по excel или сводным таблицам. Я думаю, что это тот параметр, который мне нужен «showMultipleLabel=True», но из документов я понимаю, что по умолчанию он «True», поэтому мой чекбокс должен оставаться нетронутым. Может быть, другой параметр?

Комментарии:

1. не по теме — по опыту я сталкивался со многими проблемами со сводными таблицами и Openpyxl. Наконец, я всегда храню все сводные таблицы в одной книге, а все данные в другой. python работает только с рабочей книгой данных, и сводные таблицы остаются нетронутыми.

2. @shoaib30 Спасибо за совет. Я также закончил тем, что разделил файл данных из сводного файла для этого проекта.