У меня есть два листа Excel,
Вкладка 1 - Приложение-резюме
Вкладка 2 — Приложение А
Я хочу продублировать «Format.xlsx» (т.е. скопировать и вставить) несколько раз в списке счетов-фактур и преуспеть, чтобы он был назван в соответствии с соответствующим номером счета-фактуры.
например, у меня есть два счета-фактуры с номерами 123 и 456, я хочу, чтобы формат был скопирован дважды, на лист excel, изменив имя на 123 и 456.
Также без изменения формата шаблона excel.
Я попробовал приведенный ниже код
invoice_num_list = pd.read_csv('Invoice List.csv') #List of invoices
print(invoice_num_list.shape)
# Output (140, 1)
Format = pd.read_excel('Format.xlsx') #Template having 2 tabs
for invoice_num in invoice_num_list:
Format.to_excel(f'{invoice_num}.xlsx')
Но приведенный выше код дублирует лист не 140 раз, а только один раз.
Кроме того, был изменен формат шаблона Excel, а размещенная формула полностью стерта.
Намерение состоит в том, чтобы скопировать и вставить формат 140 раз (для соответствующих номеров счетов), имея соответствующую формулу на вкладке 1, позже при размещении новых данных на вкладке 2, вкладка 1 будет автоматически обновлена.
Помощь будет высоко оценена!
Ссылка на образцы данных -
https://drive.google.com/drive/folders/1inrofeT6v9P0ISEcmbswvpxMMCq5TaV0?usp=sharing
Я думаю, что приведенный ниже пример кода будет делать то, что вы хотите.
Обратите внимание, что он использует openpyxl.load_workbook()
вместо pd.read_excel()
, что позволяет сохранить все вкладки, формулы и форматирование в существующей книге.
Также обратите внимание, что цикл for
в вашем коде необходимо немного скорректировать, чтобы правильно перебирать счета-фактуры в другом файле.
import pandas as pd
import openpyxl
invoice_num_list = pd.read_csv('Invoice List.csv') #List of invoices
print(invoice_num_list.shape)
# Here we use only the first 5 invoices, as a test
invoice_num_list = invoice_num_list[invoice_num_list.index < 5]
print(invoice_num_list)
Format = openpyxl.load_workbook('Format.xlsx') #Template having 2 tabs
for invoice_num_index, invoice_num in invoice_num_list.itertuples():
print(f"{invoice_num}")
Format.save(f'{invoice_num}.xlsx')
Выход:
(140, 1)
Invoice number
0 KA-AVSR-Feb22-1
1 KA-AVSR-Feb22-2
2 KA-AVSR-Feb22-3
3 KA-AVSR-Feb22-4
4 KA-AVSR-Feb22-5
KA-AVSR-Feb22-1
KA-AVSR-Feb22-2
KA-AVSR-Feb22-3
KA-AVSR-Feb22-4
KA-AVSR-Feb22-5