文章目录
- from openpyxl.writer.excel import save_virtual_workbook @deprecated(“Use a NamedTemporaryFile”) def save_virtual_workbook(workbook): “””Return an in-memory workbook, suitable for a Django response.””” tmp = TemporaryFile() archive = ZipFile(tmp, ‘w’, ZIP_DEFLATED, allowZip64=True) writer = ExcelWriter(workbook, archive) writer.save() tmp.seek(0) virtual_workbook = tmp.read() tmp.close() return virtual_workbook
- from django.http import HttpResponse from openpyxl import Workbook from openpyxl.writer.excel import save_virtual_workbook from urllib import quote # 导出数据 def export_data(request): wb = openpyxl.Workbook() ”’ ….为写入数据的步骤 略 ”’ # 吧文件流写入 返回体 response = HttpResponse(content=save_virtual_workbook(wb), content_type=’application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’) # 给返回的文件命名 response[‘Content-Disposition’] = ‘attachment; filename={0}.xlsx’.format(quote(str(title))) # 中文名字 return response
目录
- Django返回文件流时使用指定文件名
- Django HTTPResponse响应体中返回openpyxl生成的文件
- 导入路径为
- 在Django中使用并返回
- 总结
http响应头中字符应该按照url百分号编码
# Python3
from urllib.parse import quote
...
# 字符串编码问题 str(filename) ---- filename为文件名, 可能需要转换为字符串先
response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(filename))
直接将 openpyxl 生成 Excel 文档写入到 Django 的HttpResponse 对象响应体中
在 openpyxl 的源码中的有一个save_virtual_workbook 方法, 这个方法跟save在同一个文件,
from openpyxl.writer.excel import save_virtual_workbook
@deprecated("Use a NamedTemporaryFile")
def save_virtual_workbook(workbook):
"""Return an in-memory workbook, suitable for a Django response."""
tmp = TemporaryFile()
archive = ZipFile(tmp, 'w', ZIP_DEFLATED, allowZip64=True)
writer = ExcelWriter(workbook, archive)
writer.save()
tmp.seek(0)
virtual_workbook = tmp.read()
tmp.close()
return virtual_workbook
from django.http import HttpResponse
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
from urllib import quote
# 导出数据
def export_data(request):
wb = openpyxl.Workbook()
'''
....为写入数据的步骤 略
'''
# 吧文件流写入 返回体
response = HttpResponse(content=save_virtual_workbook(wb),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
# 给返回的文件命名
response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(title))) # 中文名字
return response
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- Django框架HttpResponse和HttpRequest对象学习
- 详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
- django实现HttpResponse返回json数据为中文
- Django框架HttpResponse对象用法实例分析
- Django使用HttpResponse返回图片并显示的方法
- Django的HttpRequest和HttpResponse对象详解
- Django使用httpresponse返回用户头像实例代码