workbook example python django excel httpresponse xlsxwriter

example - workbook python



Objeto XlsxWriter guardar como respuesta http para crear descarga en Django (3)

Cuando se trata de Django, incluso puedes prescindir de las travesuras de StringIO . HttpResponse comporta como un StringIO en ese sentido:

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

Adición: {''in_memory'': True} especificar {''in_memory'': True} o puede obtener HttpResponse has no attribute seek() . Gracias @Jeb

Objeto XlsxWriter guardar como respuesta http para crear descargas en Django?


Una pequeña actualización sobre la respuesta de @alecxe para Python 3 ( io.BytesIO en lugar de StringIO.StringIO ) y Django> = 1.5 ( content_type en lugar de mimetype ), con el ensamblado de archivos completamente en memoria que desde entonces ha sido implementado por @jmcnamara ( { ''in_memory'': True} )!
Aquí está el ejemplo completo:

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


Creo que estás preguntando cómo crear un archivo Excel en la memoria usando xlsxwriter y devolverlo a través de HttpResponse . Aquí hay un ejemplo:

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

Espero que ayude.