XlsxWriter 对象另存为 http 响应以在 Django 中创建下载

新手上路,请多包涵

XlsxWriter 对象另存为 http 响应以在 Django 中创建下载?

原文由 Waheed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 605
2 个回答

我想你问的是如何使用 xlsxwriter 在内存中创建一个 excel 文件,并通过 HttpResponse 返回它。这是一个例子:

 try:
    import cStringIO as StringIO
except ImportError:
    import StringIO

from django.http import HttpResponse

from xlsxwriter.workbook import Workbook

def your_view(request):
    # your view logic here

    # create a workbook in memory
    output = StringIO.StringIO()

    book = Workbook(output)
    sheet = book.add_worksheet('test')
    sheet.write(0, 0, 'Hello, world!')
    book.close()

    # construct response
    output.seek(0)
    response = HttpResponse(output.read(), mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    response['Content-Disposition'] = "attachment; filename=test.xlsx"

    return response

原文由 alecxe 发布,翻译遵循 CC BY-SA 4.0 许可协议

@alecxe 对 Python 3( io.BytesIO 而不是 StringIO.StringIO )和 Django >= 1.5( content_type 而不是 mimetype )的响应进行了一些更新,并使用了完全内存中的文件程序集,此后由 @jmcnamara( { ‘in_memory’:真} )!

这是完整的例子:

 import io

from django.http.response import HttpResponse

from xlsxwriter.workbook import Workbook

def your_view(request):

    output = io.BytesIO()

    workbook = Workbook(output, {'in_memory': True})
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, 'Hello, world!')
    workbook.close()

    output.seek(0)

    response = HttpResponse(output.read(), content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    response['Content-Disposition'] = "attachment; filename=test.xlsx"

    output.close()

    return response

原文由 Jeb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题