使用DjangoRESTPandas创建Excel

2024-05-16 03:58:12 发布

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

背景:我正在使用Django REST Framework(DRF)和Django REST Pandas(DRP),因为要求在应用程序中有导出到excel的功能。在

问题:如何通过添加

  1. 具有自定义标题的数据
  2. 在工作簿中添加图表
  3. 添加工作表。在
  4. 指定要下载的文件的名称

我正在寻找一个小例子(教程)链接,说明如何在DRP中执行上述任务。在

我为什么要在这里提出这个公开的问题? 在这里提问,因为谷歌搜索到目前为止还没有给出任何有价值的结果。你也可以推荐任何比DRP更好的模块,它将优雅地实现目标。在


Tags: 文件数据django功能名称rest应用程序标题
2条回答

尝试使用openpyxl生成工作簿。以下是Django下载文件的示例代码:

from openpyxl.writer.excel import save_virtual_workbook
from openpyxl import Workbook


def download_excel(request):
    if request.method == "GET":
        filename = "XLS import.xlsx"
        wb = Workbook()
        response = HttpResponse(save_virtual_workbook(wb), content_type="application/ms-excel")
        response["Content-Disposition"] = 'attachment; filename="' + filename + '"'
        return response
    else:
        return HttpResponse("Error")

通过扩展PandasExcelRenderer并重写get_pandas_kwargs()函数,可以使用Django REST Pandas来实现这一点。此函数可以返回DataFrame.to_excel()的任何参数

class CustomExcelRenderer(PandasExcelRenderer):
    def get_pandas_kwargs(self, data, renderer_context=None):
        return {
            'sheet_name': 'Custom Name',
        }

编辑:一个特殊情况是第一个to_excel()参数(excel_writer),它在get_pandas_args()中单独处理:

^{pr2}$

要更改输出文件名,您需要在视图中设置一个头,可能是通过重写list()方法:

class ExcelExportViewSet(PandasViewSet):
    renderer_classes = [CustomExcelRenderer]

    def list(self, request, *args, **kwargs):
        response = super().list(request, *args, **kwargs)
        # (compute filename)
        response['Content-Disposition'] = 'attachment;filename=' + filename

相关问题 更多 >