Domanda

In un sito di Django, voglio generare una lima di supremazia sulla base di alcuni dati nel database.

Sto pensando di utilizzare xlwt , ma ha solo un metodo per salvare i dati in un file. Come si può ottenere il file per l'oggetto HttpResponse? O forse si fa a sapere una biblioteca migliore?

Ho trovato anche questo frammento ma non faccio quello che mi serve. Tutto quello che voglio è un modo per ottenere il flusso dall'oggetto xlwt all'oggetto risposta (senza scrivere in un file temporaneo)

È stato utile?

Soluzione

pacchetto pulito! Non sapevo di questo

Secondo il documento, il metodo save(filename_or_stream) prende sia un nome di file per salvare, oppure un flusso simile a file su cui scrivere.

E un oggetto risposta Django sembra essere un flusso simile a file! quindi basta fare xls.save(response). Guardate la documentazione Django circa PDF generando con ReportLab a vedere una situazione simile.

modifica (adattato dal commento di 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

poi, dal vostro funzione di visualizzazione, basta creare l'oggetto xls e terminare con

return xls_to_response(xls,'foo.xls')

Altri suggerimenti

*** AGGIORNAMENTO: Django-Excel-templates non mantenute, cercare invece Marmir http: // brianray.github.com/mm/

Ancora in fase di sviluppo come ho tipo questo, ma http://code.google. com / p / django-Excel-templates / Django excel progetto modelli mira a fare ciò che il vostro richiesto.

In particolare guardare ai test. Ecco un caso semplice:

#
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

È possibile salvare il file XLS ad un href="http://docs.python.org/library/stringio.html" rel="nofollow noreferrer"> StringIO oggetto

È possibile tornare getvalue() dell'oggetto StringIO nella risposta. Assicurarsi di aggiungere intestazioni a segnare come un foglio di calcolo scaricabile.

Si potrebbe voler controllare huDjango che viene fith una funzione chiamata serializers.queryset_to_xls() si convertono un set di query in un foglio di Excel scaricabile.

Se il risultato di dati non ha bisogno di formule o stili esatte di presentazione, si può sempre utilizzare CSV. qualsiasi foglio di calcolo sarebbe direttamente leggerlo. Ho anche visto alcuni webapps che generano CSV, ma il nome come .xsl solo per essere sicuri che Excel apre

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top