使用for循环时写入Excel文件

问题描述

我正在尝试在for循环中将数据写入Excel文件。 但是我得到的是一行,其中包含循环接收到的最后一个数据。

我尝试了几种不同的方法,但都失败了。 下面列出了2次尝试

有什么想法吗?

def write_excel(x):
    workbook = xlsxwriter.Workbook('ID_Num.xlsx')
    worksheet = workbook.add_worksheet()

    df = pd.DataFrame(
        {'ID':[x],'mail_one':[Email],'second_mail':[second_mail],'Num':[Num],'date':[Date]})

    row_num = 0
    for key,value in df.items():
        worksheet.write(0,row_num,key)
        worksheet.write_row(1,value)
        row_num += 1

    workbook.close()

    #df = pd.DataFrame(
    #    {'ID':[x],#     'mail_one':[Email],#     'second_mail':[second_mail],#     'Num':[Num],#     'date':[Date]})

    # writer = ExcelWriter('ID_Num.xlsx')
    # df.to_excel(writer,'ID_Num',index=False)

    # writer.save()


if __name__ == "__main__":
    for x in List:
        my_dic = {}
        my_dict["ID"] = x
        my_dict["mail_one"] = Email
        my_dict["second_mail"] = second_mail
        my_dict["Num"] = str(Num)
        my_dict["date"] = Date
        print(my_dict)
        write_excel(x)

解决方法

我没有xlsxwriter,所以我无法测试。该文档说它无法修改现有文件,因此我怀疑for x in List:的每次迭代都覆盖了文件(workbook = xlsxwriter.Workbook('ID_Num.xlsx'))。

您可以通过以下更改制作多个文件:

def write_excel(x,i):
    workbook = xlsxwriter.Workbook(f'ID_Num{i}.xlsx')
    ...
# and
for i,x in enumerate(List):
    ...
    write_excel(x,i)

或者您可以累积多个字典并将它们全部传递给函数

data = []
for x in List:
    my_dic = {}
    ...
    data.append(my_dic)
write_excel(data)

更改功能以迭代这些命令;为每个人制作一张新纸

def write_excel(data):
    workbook = xlsxwriter.Workbook('ID_Num.xlsx')
    for sht in data:
        worksheet = workbook.add_worksheet()
        df = pd.DataFrame(...

        row_num = 0
        for key,value in df.items():
            worksheet.write(...
            worksheet.write_row(...
            row_num += 1

    workbook.close()