使用超过300000行优化xlsxwriter

2024-09-27 23:23:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码是用django/python编写的。 我用的是xlsxwriter,可能是错误的选择。我对其他插件持开放态度

我的问题是我必须在excel中写30多万行,这需要花费很多时间(几个小时)。我想加快速度

这是我的代码:

def export_all_agent(request):
    output = io.BytesIO()
    epoch = datetime.now().strftime('_%d-%m-%Y_%H-%M-%S')
    filename = "export_all_agent" + str(epoch) + ".xlsx"
    workbook = xlsxwriter.Workbook(output, {'in_memory': True})
    worksheet = workbook.add_worksheet()
    row = 0
    col = 0
    titles = ['matricule', 'name', 'first name', 'gender', 'birth day', 'status', 'Percentage Worktime',
                'job category', 'grade_name', 'etab name', 'etab siret', 'territoire', 'region']
    agents = Agent.objects.all()
    for i, item in enumerate(titles):
        worksheet.write(row, col + i, item)
    row += 1
    for agent in agents:
        worksheet.write(row, 0, agent.matricule)
        worksheet.write(row, 1, agent.name)
        worksheet.write(row, 2, agent.first_name)
        worksheet.write(row, 3, agent.gender)
        worksheet.write(row, 4, agent.birth_date)
        worksheet.write(row, 5, agent.status)
        worksheet.write(row, 6, agent.percentage_woktime)
        worksheet.write(row, 7, agent.job_category)
        worksheet.write(row, 8, agent.grade_name)
        worksheet.write(row, 9, agent.etablissement.name)
        worksheet.write(row, 10, agent.etablissement.siret)
        worksheet.write(row, 11, agent.etablissement.territoire.name)
        worksheet.write(row, 12, agent.etablissement.territoire.region.name)
        row += 1
    workbook.close()
    output.seek(0)
    response = HttpResponse(output.read(),
                            content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    response['Content-Disposition'] = "attachment; filename=" + filename
    return response

你认为有什么方法可以优化它吗?或者我应该改变我的插件吗

谢谢你的帮助


Tags: 代码nameinoutputresponseallfilenamewrite

热门问题