如何提高单元格中的openpyxl写入值?

时间:2019-07-08 15:31:37

标签: python performance openpyxl xlsm

我有一个带有宏和基本结构的模板.xlsm文件。我需要在文件中写一些数组中的用户对象。由于有许多未使用的列(或用户类中没有对应的值),因此我只需要为每一行写特定的单元格。

我得出了这样的基本循环:

wb2 = openpyxl.load_workbook(XLSM_TEMPLATE_PATH, keep_vba=True)
ws2 = wb2['Datas']
row_num = 4

i = 0
for user in users:
    current_row = row_num + i
    ws2.cell(row=current_row, column=21).value = user.last_name
    ws2.cell(row=current_row, column=22).value = user.first_name
    ws2.cell(row=current_row, column=25).value = user.tax_code
    ws2.cell(row=current_row,
             column=30).value = user.residence_address.street_address + ', ' + user.residence_address.street_number
    ws2.cell(row=current_row, column=31).value = user.residence_address.city_name
    ws2.cell(row=current_row, column=34).value = user.email
    ws2.cell(row=current_row, column=38).value = user.date_of_birth
    ws2.cell(row=current_row, column=39).value = user.place_of_birth

    i += 1

exported_file_path = EXPORT_PATH.format(generate_random_code('.xlsm'))
wb2.save(exported_file_path)
wb2.close()

问题在于,为3-4个用户循环需要大约15秒的处理时间,因此Amazon lambda函数(托管脚本)会超时并失败...而且也不会增加工作时间因为这样做会增加成本太多。

有什么解决方案可以加快流程?

1 个答案:

答案 0 :(得分:0)

经过不同的研究,唯一可以提高性能的方法是使用更优化的库来更改库。我用Pandas获得了更好的结果。仍然不是“快速”,但我的计算时间约为-20%。