Как в openpyxl с помощью save сохранить в разные файлы при одной переменной openpyxl.load_workbook?
Есть однолистовой exel. В одной из колонок указаны подразделения, повторяющиеся. Хочу сделать из одного exel много, но в каждом отдельное подразделение. Не хочу применять много переменных wbX = openpyxl.load_workbook, потому что Х неизвестное количество. Проблема в том, что не пойму как обнулить wb2_s = wb2.active после записи, в следующий файл пишется что в предыдущем + новое.
import openpyxl
## файлы для работы
xl_f_from = 'users_all_exists.xlsx'
xl_f_to = 'new/users_sort.xlsx'
## переменные
perv_stoka = 2
posl_stroka = 605
## открываю книгу с подразделениями
wb1 = openpyxl.load_workbook(xl_f_from, data_only=True)
wb1_s = wb1.active
## создаю итоговую книгу
wb2 = openpyxl.Workbook()
wb2_s = wb2.active
## считать колонку подразделений в множество чтобы сравнивать при сборе информации
podrazd_exists = set()
for i in range(perv_stoka, posl_stroka+1):
podrazd_exists.add(wb1_s['e'+str(i)].value)
# выбирая одно подразделение выбираю по нему все подразделения из колонки
for indexP, podr in enumerate(podrazd_exists, 1):
wb2_s.append(["Логин","ФИО","Статус","Должность","Подразделение"])
for i in range(perv_stoka, posl_stroka+1):
if wb1_s['e'+str(i)].value == podr:
wb2_s.append([wb1_s['a'+str(i)].value, wb1_s['b'+str(i)].value, wb1_s['c'+str(i)].value, wb1_s['d'+str(i)].value, wb1_s['e'+str(i)].value])
wb2.save(xl_f_to.replace('.', str(indexP)+'.'))
Ответы (1 шт):
Автор решения: Максим Красовский
→ Ссылка
Оказалось, что нужно перед каждой записью просто инициализировать файл
# выбирая одно подразделение выбираю по нему все подразделения из колонки
for indexP, podr in enumerate(podrazd_exists, 1):
## создаю итоговую книгу
wb2 = openpyxl.Workbook()
wb2_s = wb2.active
wb2_s.append(["Логин", "ФИО", "Статус", "Должность", "Подразделение"])
for i in range(perv_stoka, posl_stroka+1):
if wb1_s['e'+str(i)].value == podr:
#print(wb1_s['e'+str(i)].value)
wb2_s.append([wb1_s['a'+str(i)].value, wb1_s['b'+str(i)].value,
wb1_s['c'+str(i)].value, wb1_s['d'+str(i)].value,
wb1_s['e'+str(i)].value]
)
wb2.save(xl_f_to.replace('users', str(indexP)).replace('sort', str(podr)))
wb2 = openpyxl.Workbook()
wb2_s = wb2.active