python - XlsxWriter ऑब्जेक्ट Django में डाउनलोड बनाने के लिए http प्रतिक्रिया के रूप में सहेजें




excel httpresponse (2)

Python 3 के लिए @alecxe प्रतिक्रिया पर थोड़ा अपडेट ( StringIO.StringIO के बजाय io.BytesIO ) और Django> = 1.5 ( mimetype के बजाय content_type ), पूरी तरह से मेमोरी फ़ाइल असेंबली के साथ जिसे @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

XlsxWriter ऑब्जेक्ट Django में डाउनलोड बनाने के लिए http प्रतिक्रिया के रूप में सहेजता है?


जब Django की बात आती है, तो आप पूरे StringIO बिना भी कर सकते हैं। HttpResponse उस सम्मान में एक स्ट्रिंगियो की तरह व्यवहार करता है:

from django.http import HttpResponse
from xlsxwriter.workbook import Workbook

def your_view(request):
    # your view logic here

    # create the HttpResponse object ...
    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    response['Content-Disposition'] = "attachment; filename=test.xlsx"

    # .. and pass it into the XLSXWriter
    book = Workbook(response, {'in_memory': True})
    sheet = book.add_worksheet('test')       
    sheet.write(0, 0, 'Hello, world!')
    book.close()

    return response

अनुपूरक: आपको {'in_memory': True} निर्दिष्ट करने की आवश्यकता है या आपको HttpResponse has no attribute seek() मिल सकती है HttpResponse has no attribute seek() । धन्यवाद @ जेब





xlsxwriter