Utilice pyExcelerator para generar archivo de Excel dinámica con Django. Garantizar nombre de archivo temporal único
-
19-09-2019 - |
Pregunta
Me gustaría generar un archivo de Excel dinámica a petición de Django. La biblioteca pyExcelerator hace esto, pero no he encontrado ninguna manera de utilizar el contenido del archivo de Excel sin generar un archivo de Excel temporal del lado del servidor, la lectura, el uso de su contenido y eliminarlo.
El problema es que pyExcelerator única manera de extraer el contenido del archivo de Excel que está salvando a través de:
workbook = pyExcelerator.Workbook()
workbook.save("tmp_filename")
Y a continuación, leer el contenido del archivo temporal. No puedo usar la biblioteca "archivo temporal" estándar porque no acepta un archivo, sólo un nombre de archivo. Cómo puedo estar seguro de que el nombre del archivo es única y que el archivo se elimina una vez que se ha utilizado?
Solución
pyExcelerator es unmaintained, pero tiene un tenedor, xlwt , que se mantiene y tiene más características, incluyendo lo que permite guardar a cualquier objeto de tipo fichero. Esto incluye el ahorro directamente a un HttpResponse
Django:
from django.http import HttpResponse
import xlwt
def my_view(request):
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename="foo.xls"'
wb = xlwt.Workbook()
wb.save(response)
return response
Otros consejos
¿Por qué no se puede utilizar el módulo tempfile
?
¿Qué hay de:
import tempfile
fd, filename = tempfile.mkstemp()
fd.close()
workbook.save(filename)