【问题标题】:django pandas dataframe download as excel filedjango pandas数据框下载为excel文件
【发布时间】:2019-10-17 19:38:43
【问题描述】:

我有一个将放置在 Docker 容器中的 Django 应用程序。

应用以 Dataframe 格式准备数据。我想允许用户将数据作为 excel 文件下载到他/她的本地驱动器。

我过去曾使用过 df.to_excel,但在这种情况下不起作用。

请建议最好的方法来做到这一点。

【问题讨论】:

  • 您能否与df.to_excel 分享您现在正在做的事情以及为什么它不起作用?
  • df.to_excel 将下载到本地驱动器。但在这种情况下,应用程序将作为 docker 镜像在远程服务器上运行。

标签: django excel download


【解决方案1】:

开始,你可以让Django直接给BytesIO写信,比如:

from django.http import HttpResponse
from io import BytesIO

def some_view(request):
    with BytesIO() as b:
        # Use the StringIO object as the filehandle.
        writer = pd.ExcelWriter(b, engine='xlsxwriter')
        df.to_excel(writer, sheet_name='Sheet1')
        writer.save()
        # Set up the Http response.
        filename = 'django_simple.xlsx'
        response = HttpResponse(
            b.getvalue(),
            content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        response['Content-Disposition'] = 'attachment; filename=%s' % filename
        return response

您可能需要安装 Excel 编写器模块(如 xlsxwriteropenpyxl)。

【讨论】:

  • 嗨。我按原样使用你的函数,除了传入 df.我还在您返回之前添加了一行:ldm_df.to_excel("D:\\Users\\myfolder\\test.xlsx") 以验证我可以编写excel。我目前正在本地主机上运行。我期待返回 HttpResponse 以显示下载到 temp。但是没有下载任何东西。请告知我所缺少的。感谢您的帮助。
  • @jscriptor:您应该将其写入文件。这里的writer 是内存中的一个对象,可能视图只是在那一行崩溃。
  • 嗨。我正在使用 ajax 来调用我的 some_view 版本。 --- $.ajax({ headers: {"X-CSRFToken": csrftoken}, url: 'carmaapp/export_data', data: { 'user_selections': adict, }, type: "POST", success: function (data ) { alert(data) }, 错误:函数 (errMsg) { alert(errMsg); } }); ---- 如何将数据推送到用户主文件夹中的 excel 文件中?
  • @jscriptor:您不能将文件“推送”到目录,因为 HTML/JavaScript 无法访问用户的磁盘,或者一般来说,数量非常有限浏览器监控的选项。但是,您可以让用户确认保存,请参见此处:stackoverflow.com/a/9970672/67579
  • 谢谢。我得到了下载,但它似乎只适用于小尺寸下载.. 我收到 [Chrome 下载(1)失败 - 网络错误] 消息。看来我无法下载> 2MB。测试了 1.187 KB 并且有效)。我将 DATA(FILE)_UPLOAD_MAX_MEMORY_SIZE = 5242880 添加到 settings.py,但这没有帮助。我在 Chrome 本地主机 8000 上运行。知道如何增加下载大小吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 2017-06-27
  • 2021-05-26
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多