我正在使用xlwt生成一个Excel文件,我在Django视图的HttpResponse中作为附件返回。
from django.http import HttpResponse
def my_view(request):
...
workbook = xlwt.Workbook(encoding='utf-8')
#write my workbook data here
workbook.save(#absolute_path_here)
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=worksheet.xls'
return response
文件保存到我指定的路径,我可以从磁盘正确打开文件并且数据存在。但是,当我尝试使用Excel从文件下载提示打开文件时,我受到了欢迎:
[字幕] 您尝试打开'worksheet.xls'的文件格式与文件扩展名指定的格式不同。在打开文件之前,请验证文件是否已损坏且是否来自受信任的源。你想现在打开文件吗?
并且Excel文件没有数据。我做错了什么?
答案 0 :(得分:3)
django HttpResponse是一个类似文件的对象(它提供了write,flush ...方法,请参阅the docs)。因此,您可以将其直接传递给工作簿的save方法。
import xlwt
wb = xlwt.Workbook()
...
...
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=your-file.xls'
wb.save(response)
return response
答案 1 :(得分:0)
您需要将文件的内容传递给HttpResponse
,否则您将发送空响应(无数据);这就是你得到那个错误的原因。
import xlwt
wb = xlwt.Workbook()
# your code
content = StringIO.StringIO()
wb.save(content) # "File" is written
response = HttpResponse(content.getvalue(),
mimetype='application/vnd.ms-excel; charset=utf-8')
response['Content-Disposition'] = 'attachment; filename=worksheet.xls'
return response
此外,将字符集与mime类型一起传递总是好的。