【问题标题】:Exporting Django models to Excel (different sheets) using Django-tables2使用 Django-tables2 将 Django 模型导出到 Excel(不同的工作表)
【发布时间】:2022-10-20 22:30:16
【问题描述】:

我检查了 django-tables2 文档,但是我没有找到一种简单的方法将模型导出到 Excel 中的不同工作表。为简单起见,假设我有两个不同的模型:销售和产品。我想导出一个包含两个不同工作表的 excel 文档:销售和产品。我可以使用下面显示的代码导出第一个模型,但我不确定是否有办法将 Products 模型导出到另一张表。任何帮助,将不胜感激。


export_format = request.GET.get('_export', None)

if TableExport.is_valid_format(export_format):
        table = [[Sales Table Object]]
        exporter = TableExport(export_format, table)
        return exporter.response('File_Name.{}'.format(export_format)) ```

【问题讨论】:

  • 对您正在使用的包没有帮助,但是在 python 中导出 excel 文件并构建您需要的工作表非常简单。

标签: django django-tables2


【解决方案1】:

因此,我通过使用 pandas 提出了一个简单的解决方案,可能不是最有效的。将查询集转换为 pandas 数据框并使用 pandas ExcelWriter 生成 excel,它可以为不同的工作表完成。可能对于大数据的部署,使用像 xlsxwriter 这样的库可能会更好,但它适用于我想做的事情。

    iden= request.GET["id"]
    output = BytesIO()
    queryset = Efectivo.objects.filter(Q(id1=iden)).values()
    df = pd.DataFrame(queryset)
    writer = pd.ExcelWriter(output,engine='xlsxwriter')
    df.to_excel(writer,sheet_name='Efectivo')
    writer.save()
    output_name = 'example'
    output.seek(0)
    response = HttpResponse(output, 
    content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response['Content-Disposition'] = f'attachment; filename={output_name}.xlsx'
        
    
    return response```

【讨论】:

    【解决方案2】:

    尝试使用xlsxwriter:

    response = HttpResponse(content_type='application/vnd.ms-excel')
    # tell the browser what the file is named
    response['Content-Disposition'] = 'attachment;filename="file_name.xlsx"'
    writer = pd.ExcelWriter(response, engine = 'xlsxwriter')
    #d1 and d2 are pandas dataframe 
    d1.to_excel(writer, sheet_name='Sheet1',index=False)
    d2.to_excel(writer, sheet_name='Sheet2',index=False)
    writer.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多