我有一张两张excel表,
- Format.xlsx(有2个选项卡(
表1-总结附录
表2-附录A
- 发票列表-具有唯一的发票列表
我想复制";格式.xlsx"(即复制和粘贴(发票列表中的次数,并根据相关发票编号命名excel。
例如,我有两张编号为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模板的格式也发生了变化,放置的公式也被完全删除。
其目的是复制粘贴表1中具有相关公式的格式140次(针对各个发票编号(,稍后在表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