【问题标题】:Corrupt excel file when serving file using Django and openpyxl使用 Django 和 openpyxl 提供文件时损坏的 excel 文件
【发布时间】:2020-06-05 07:41:14
【问题描述】:

我在尝试将我的 excel 文件作为 httpresponse 提供时遇到问题,它的大小几乎翻了一番,并且在我尝试打开它时已损坏。

我的设置如下:

  1. 我有一个 Excel 模板,我使用 shutil2 制作了一份副本
  2. 然后我在 openpyxl 中使用 load_workbook() 打开副本
  3. 我用数据填充工作簿

然后我(根据 openpyxl 文档)将工作簿保存为流并将其保存为 httpresponse 对象以通过 django 返回到我的网站

with NamedTemporaryFile() as tmp:
    wb.save(tmp.name)
    tmp.seek(0)
    stream = tmp.read()

response = HttpResponse(content=stream, content_type="application/ms-excel")
# I've also tried with application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
response['Content-Disposition'] = 'attachment; filename=Excel.xls'
return response

在我的模板中,我有一些为用户下载 excel 的 jquery 代码。这是按照这个问题的答案完成的:Get excel file (.xlsx) from server response in ajax

这一切正常,但生成的下载文件已损坏,虽然我预计它的大小约为 7mb,但实际上是 16mb。

有人知道我做错了什么吗?

【问题讨论】:

    标签: python django openpyxl


    【解决方案1】:

    你试过以二进制模式打开它吗?这对我有帮助。我相信下面的代码应该会有所帮助:

    使用 NamedTemporaryFile(mode='rb') 作为 tmp: ..

    【讨论】:

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