django excel xlwt

前端 未结 6 641
醉梦人生
醉梦人生 2020-12-02 08:15

On a django site, I want to generate an excel file based on some data in the database.

I\'m thinking of using xlwt, but it only has a method to save the data to a fi

相关标签:
6条回答
  • 2020-12-02 08:34

    ***UPDATE: django-excel-templates no longer being maintained, instead try Marmir http://brianray.github.com/mm/

    Still in development as I type this but http://code.google.com/p/django-excel-templates/ Django excel templates project aims to do what your asking.

    Specifically look at the tests. Here is a simple case:

    #
    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
    
    0 讨论(0)
  • 2020-12-02 08:37

    neat package! i didn't know about this

    According to the doc, the save(filename_or_stream) method takes either a filename to save on, or a file-like stream to write on.

    And a Django response object happens to be a file-like stream! so just do xls.save(response). Look the Django docs about generating PDFs with ReportLab to see a similar situation.

    edit: (adapted from ShawnMilo's comment):

    def xls_to_response(xls, fname):
        response = HttpResponse(mimetype="application/ms-excel")
        response['Content-Disposition'] = 'attachment; filename=%s' % fname
        xls.save(response)
        return response
    

    then, from your view function, just create the xls object and finish with

    return xls_to_response(xls,'foo.xls')
    
    0 讨论(0)
  • 2020-12-02 08:41

    If your data result doesn't need formulas or exact presentation styles, you can always use CSV. any spreadsheet program would directly read it. I've even seen some webapps that generate CSV but name it as .XSL just to be sure that Excel opens it

    0 讨论(0)
  • 2020-12-02 08:45

    You can save your XLS file to a StringIO object, which is file-like.

    You can return the StringIO object's getvalue() in the response. Be sure to add headers to mark it as a downloadable spreadsheet.

    0 讨论(0)
  • 2020-12-02 08:46

    Use https://bitbucket.org/kmike/django-excel-response

    0 讨论(0)
  • 2020-12-02 08:47

    You might want to check huDjango which comes fith a function called serializers.queryset_to_xls() do convert a queryset into an downloadable Excel Sheet.

    0 讨论(0)
提交回复
热议问题