Почему вместе с нужным листом 4, сохраняются все 20 листов при сохранение файлов Excel?
Задача: Есть шаблон файла с 20
разными таблицами для отчёта, нужно заполнить их все, используя различную логику. Я прописываю её на pandas. Далее покажу свою проблему, на примере отчёта 4
:
Есть файл1
, в котором содержится информация по деньгам и проектам. Файл2
, который содержит 20
разных шаблонов отчётов.
Мои действия: Открываю шаблон, произвожу необходимые вычисления с данными из файла1
, записываю в новый файл Result
(Важно, чтобы сохранялось исходное форматирование таблиц и шрифтов, поэтому использую openpyxl
, а не pandas
, для чтения и записи шаблона).
Проблема: при выполнении этого скрипта, создаётся новый файл Result.xlsx
, в нём всё правильно посчитано и сохранено исходное форматирование, но вместе с нужным листом 4, сохраняются все 20
листов исходных отчётов из файла2
. И если я запущу аналогичный скрипт для отчёта 5
, то он сотрёт все предыдущие посчитанные отчеты и сохранит только отчёт 5
и 20
остальных пустых листов из файла2
.
А в итоге мне нужно прогнать все 20
скриптов, чтобы они сохранили и посчитали 20
отчётов в файле Result
. (т.е. нужно не перезаписывать этот файл, а просто добавлять к нему новый лист с вычислениями соответствующего скрипта)
import pandas as pd
from tqdm import tqdm
import openpyxl
def tablica4():
# Загружаем первый файл
file1 = pd.read_excel(r"C:\1\2\3\4\5\6\File1.xlsx",
sheet_name="File1")
# Открываем шаблон
workbook = openpyxl.load_workbook(filename='Отчет_шаблон.xlsx')
worksheet = workbook["4"]
workbook.active = worksheet
# Условия для фильтрации данных. Код строки
kod_3 = file1 .loc[file1 ['Тип'] == "Тип1"]
kod_4 = file1 .loc[file1 ['Тип'].isin(("Тип2", "Тип3"))]
# Суммируем поступления по фильтрованному столбцу
kod_3_4 = kod_3['Сумма'].sum() / 1000
kod_4_4 = kod_4['Сумма'].sum() / 1000
kod_2_4 = kod_3_4 + kod_4_4
kod_1_4 = kod_2_4
# Подсчитаем уникальные проекты
kod_3_3 = len(kod_3['ID'].unique())
kod_4_3 = len(kod_4['ID'].unique())
kod_2_3 = kod_3_3 + kod_4_3
kod_1_3 = kod_2_3
# Записываем данные в ячейки таблицы
worksheet['D8'].value = kod_3_4
worksheet['D9'].value = kod_4_4
worksheet['D7'].value = kod_2_4
worksheet['D6'].value = kod_1_4
worksheet['C8'].value = kod_3_3
worksheet['C9'].value = kod_4_3
worksheet['C7'].value = kod_2_3
worksheet['C6'].value = kod_1_3
workbook.save("Result.xlsx")
tablica4()
P.S. Пробовал различные варианты сохранения, и при использовании pandas всё сохраняется и работает отлично, но слетает исходное форматирование файла шаблона, а мне оно нужно. Поэтому решил использовать openpyxl
, он сохраняет форматирование и удобно работает, просто видимо я упускаю какой-то важный момент.