django excel xlwt

Adr*_*ter 34 python django excel xlwt

在django站点上,我想基于数据库中的一些数据生成excel文件.

我正在考虑使用xlwt,但它只有一种方法将数据保存到文件中.如何将文件获取到HttpResponse对象?或者你知道一个更好的图书馆吗?

我也找到了这个片段,但它没有做我需要的.我想要的是一种从xlwt对象获取流到响应对象的方法(无需写入临时文件)

Jav*_*ier 55

整齐的包!我不知道这个

根据文档,该save(filename_or_stream)方法需要一个文件名来保存,或者一个类似文件的流来写入.

并且Django响应对象恰好是类似文件的流!所以就这么做xls.save(response).查看有关使用ReportLab 生成PDF的Django文档,以查看类似的情况.

编辑:(改编自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
Run Code Online (Sandbox Code Playgroud)

然后,从您的视图功能,只需创建xls对象并完成

return xls_to_response(xls,'foo.xls')
Run Code Online (Sandbox Code Playgroud)

  • 这很好用,但直到你弄清楚语法.诀窍是创建一个HttpResponse对象并将xlwt工作簿保存到它.示例:xls_response = HttpResponse(mimetype ="application/ms-excel")xls_response ['Content-Disposition'] ='附件; filename = foo.xls'xls.save(xls_response)返回xls_response (6认同)

bri*_*ray 6

***更新:django-excel-templates不再维护,而是尝试Marmir http://brianray.github.com/mm/

我还在开发中,但是http://code.google.com/p/django-excel-templates/ Django excel模板项目旨在满足您的要求.

具体看一下测试.这是一个简单的案例:

#
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
Run Code Online (Sandbox Code Playgroud)