django excel xlwt

在django网站上,我想根据数据库中的一些数据生成一个excel文件。

我想使用xlwt ,但它只有一个方法来保存数据到一个文件。 如何获取文件到HttpResponse对象? 或者,也许你知道一个更好的图书馆?

我也发现这个片段,但它没有做我所需要的。 我所需要的是一种从xlwt对象到响应对象的stream(不写入临时文件)

整洁的包装! 我不知道这件事

根据文档, save(filename_or_stream)方法可以保存一个文件名,或者写一个类似文件的stream。

而一个Django响应对象恰好是一个文件stream! 所以只要做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 

然后,从你的视图函数,只需创buildxls对象并完成

 return xls_to_response(xls,'foo.xls') 

***更新:Django的Excel模板不再维护,而是尝试马尔米尔http://brianray.github.com/mm/

仍然在开发中,我input这个,但http://code.google.com/p/django-excel-templates/ Django的Excel模板项目旨在做你的要求。

具体看看testing。 这是一个简单的例子:

 # 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 

您可以将您的XLS文件保存为类似文件的StringIO对象。

您可以在响应中返回StringIO对象的getvalue() 。 请务必添加标题,将其标记为可下载的电子表格。

你可能想检查一个名为serializers.queryset_to_xls()函数的huDjango是否将查询集转换为可下载的Excel工作表。

如果您的数据结果不需要公式或确切的演示文稿样式,则始终可以使用CSV。 任何电子表格程序都会直接读取它。 我甚至看到一些生成CSV的webapps,但是将其命名为.XSL,以确保Excel打开它