Django excel xlwt

votos
31

Em um site Django, eu quero gerar um arquivo do Excel com base em alguns dados no banco de dados.

Estou pensando em usar xlwt , mas ele só tem um método para salvar os dados em um arquivo. Como pode obter o arquivo para o objeto HttpResponse? Ou talvez você sabe uma biblioteca melhor?

Eu também encontrei este trecho , mas ele não faz o que eu preciso. Tudo que eu quero é uma maneira de obter o fluxo do objeto xlwt no objeto de resposta (sem escrever para um arquivo temporário)

Publicado 19/05/2009 em 16:04
fonte usuário
Em outras línguas...                            


6 respostas

votos
50

arrumado pacote! Eu não sabia sobre esse

De acordo com o documento, o save(filename_or_stream)método leva um nome de arquivo para economizar, ou um fluxo de arquivo semelhante para escrever sobre.

E um objeto de resposta Django passa a ser um fluxo de arquivo-like! então faça xls.save(response). Olhe a documentação do Django sobre a geração de PDFs com ReportLab para ver uma situação semelhante.

edit: (adaptado de comentário 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

em seguida, a partir de sua função de visualização, basta criar o xlsobjeto e terminar com

return xls_to_response(xls,'foo.xls')
Respondeu 19/05/2009 em 16:09
fonte usuário

votos
6

*** UPDATE: django-excel-templates já não está sendo mantido, em vez de tentar Marmir http://brianray.github.com/mm/

Ainda em desenvolvimento como eu escreva isso, mas http://code.google.com/p/django-excel-templates/ Django excel projeto modelos visa a fazer o seu pedido.

Especificamente olhar para os testes. Aqui está um caso simples:

#
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
Respondeu 28/01/2010 em 07:05
fonte usuário

votos
2

Você pode querer verificar huDjango que vem fith uma função chamada serializers.queryset_to_xls()não converter um queryset em uma folha de Excel para download.

Respondeu 01/09/2009 em 14:56
fonte usuário

votos
2

Você pode salvar o arquivo XLS para um StringIO objeto, que é arquivo-like.

Você pode retornar o StringIO objeto de getvalue()na resposta. Certifique-se de adicionar cabeçalhos para marcá-lo como uma planilha para download.

Respondeu 19/05/2009 em 20:17
fonte usuário

Respondeu 06/10/2011 em 14:36
fonte usuário

votos
0

Se o resultado de dados não precisa de fórmulas ou estilos de apresentação exatas, você sempre pode usar CSV. qualquer programa de planilha iria lê-lo diretamente. Eu mesmo vi alguns webapps que geram CSV, mas nomeá-lo como .xsl só para ter certeza que o Excel abre

Respondeu 19/05/2009 em 16:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more