首页 > 解决方案 > 优化超过 300 000 行的 xlsxwriter

问题描述

我的代码在 django/python 中。我正在使用 xlsxwriter,也许这是错误的选择。我对其他插件持开放态度。

我的问题是我必须在 excel 中写入超过 300 000 行,这需要很多时间(几个小时)。我想加速它。

这是我的代码:

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

你看到一些优化它的方法吗?或者我应该改变我的插件吗?

谢谢你的帮助!

标签: pythondjangoxlsxwriter

解决方案


推荐阅读