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.