python - with - django excel xlwt
xlrd documentation (6)
En un sitio de django, quiero generar un archivo de Excel basado en algunos datos en la base de datos.
Estoy pensando en usar xlwt , pero solo tiene un método para guardar los datos en un archivo. ¿Cómo se puede obtener el archivo al objeto HttpResponse? ¿O tal vez conoces una mejor biblioteca?
También encontré este snippet pero no hace lo que necesito. Todo lo que quiero es una forma de obtener la transmisión del objeto xlwt al objeto de respuesta (sin escribir en un archivo temporal)
*** ACTUALIZACIÓN: django-excel-templates ya no se mantienen, en su lugar, intente con Marmir http://brianray.github.com/mm/
Todavía estoy en desarrollo mientras escribo esto, pero el proyecto de plantillas de http://code.google.com/p/django-excel-templates/ Django excel tiene como objetivo hacer lo que usted solicite.
Mira específicamente las pruebas. Aquí hay un caso simple:
#
from django_excel_templates import *
from django_excel_templates.color_converter import *
from models import *
from django.http import HttpResponse
def xls_simple(request):
## Simple ##
testobj = Book.objects.all()
formatter = ExcelFormatter()
simpleStyle = ExcelStyle(vert=2,wrap=1)
formatter.addBodyStyle(simpleStyle)
formatter.setWidth(''name,category,publish_date,bought_on'',3000)
formatter.setWidth(''price'',600)
formatter.setWidth(''ebook'',1200)
formatter.setWidth(''about'',20000)
simple_report = ExcelReport()
simple_report.addSheet("TestSimple")
filter = ExcelFilter(order=''name,category,publish_date,about,bought_on,price,ebook'')
simple_report.addQuerySet(testobj,REPORT_HORZ,formatter, filter)
response = HttpResponse(simple_report.writeReport(),mimetype=''application/ms-excel'')
response[''Content-Disposition''] = ''attachment; filename=simple_test.xls''
return response
Es posible que desee comprobar huDjango que viene con una función llamada serializers.queryset_to_xls()
convertir un queryset en una hoja de Excel descargable.
Puede guardar su archivo XLS en un objeto StringIO , que es como un archivo.
Puede devolver getvalue()
del objeto getvalue()
en la respuesta. Asegúrese de agregar encabezados para marcarlo como una hoja de cálculo descargable.
Si el resultado de su información no necesita fórmulas o estilos de presentación exactos, siempre puede usar CSV. cualquier programa de hoja de cálculo lo leería directamente. Incluso he visto algunos webapps que generan CSV, pero lo nombro como .XSL solo para asegurarme de que Excel lo abre
paquete ordenado! no sabía acerca de esto
De acuerdo con el documento, el método save(filename_or_stream)
toma un nombre de archivo para guardar, o una secuencia de archivos para escribir.
¡Y un objeto de respuesta de Django pasa a ser una secuencia de archivos! así que simplemente haz xls.save(response)
. Mire los documentos de Django sobre la generación de archivos PDF con ReportLab para ver una situación similar.
editar: (adaptado del comentario de ShawnMilo):
def xls_to_response(xls, fname):
response = HttpResponse(mimetype="application/ms-excel")
response[''Content-Disposition''] = ''attachment; filename=%s'' % fname
xls.save(response)
return response
luego, desde su función de vista, simplemente cree el objeto xls
y termine con
return xls_to_response(xls,''foo.xls'')