Djangoサイトで、データベース内のいくつかのデータに基づいてExcelファイルを生成したいと思います。
xlwt を使用することを考えていますが、データをファイルに保存する方法しかありません。ファイルをHttpResponseオブジェクトに取得するにはどうすればよいですか?それとも、もっと良いライブラリを知っていますか?
私もこれを見つけました スニペット しかしそれは私が必要とすることをしません。私が欲しいのは、xlwtオブジェクトから応答オブジェクトにストリームを取得する方法です(一時ファイルに書き込むことなく)
きちんとしたパッケージ!私はこれについて知りませんでした
ドキュメントによると、save(filename_or_stream)
メソッドは、保存するファイル名、または書き込むファイルのようなストリームのいずれかを取ります。
そして、Django応答オブジェクトはたまたまファイルのようなストリームです!だからxls.save(response)
を実行してください。Djangoに関するドキュメントを見てください- PDFの生成 ReportLabで同様の状況を確認します。
編集:(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
次に、ビュー関数から、xls
オブジェクトを作成し、で終了します。
return xls_to_response(xls,'foo.xls')
***更新:Django-Excel-テンプレートは維持されなくなりました。代わりに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
XLSファイルを StringIO オブジェクトに保存できます。これはファイルのようなものです。
StringIOオブジェクトのgetvalue()
を応答で返すことができます。ダウンロード可能なスプレッドシートとしてマークするために、必ずヘッダーを追加してください。
serializers.queryset_to_xls()
という関数が付属している Django を確認することをお勧めします。クエリセットをダウンロード可能なExcelシートに変換します。
データ結果に数式や正確な表示スタイルが必要ない場合は、いつでもCSVを使用できます。スプレッドシートプログラムはそれを直接読み取ります。 CSVを生成するWebアプリを見たことがありますが、Excelで確実に開くために.XSLという名前を付けています