2009-05-19 7 views
31

djangoサイトでは、データベースの一部のデータに基づいてExcelファイルを生成したいと考えています。django excel xlwt

私はxlwtを使用することを考えていますが、データをファイルに保存する方法しかありません。どのようにHttpResponseオブジェクトにファイルを取得できますか?あるいは、より良い図書館を知っていますか?

私はまたこれを見つけましたsnippetしかし、私が必要とすることはしません。私が望むのはxlwtオブジェクトから応答オブジェクトへのストリームを得る方法です(テンポラリファイルに書き込むことなく)

答えて

50

素敵なパッケージ!私はこれについて知らなかった

この文書によれば、save(filename_or_stream)メソッドは、保存するファイル名か、書き込むファイルのようなストリームのいずれかをとります。

そして、Djangoの応答オブジェクトはファイルのようなストリームです。だからちょうどxls.save(response)をしてください。同様の状況を見るには、ReportLabでgenerating PDFsに関する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 

そして、あなたのビュー関数から、ちょうどxlsオブジェクトを作成し、あなたのデータはdoesnのもたらす場合

return xls_to_response(xls,'foo.xls') 
+0

おかげで、私はそれがこのようなものであるべきと思ったが、私はどこを見れする知りませんでした。私はそれを試してみましょう –

+5

これは素晴らしいですが、あなたが構文を理解するまではうまくいきません。トリックは、HttpResponseオブジェクトを作成し、xlwtワークブックをそのオブジェクトに保存することです。 サンプル: xls_response = HttpResponse(mimetype = "application/ms-excel") xls_response ['Content-Disposition'] = '添付ファイル。ファイル名= foo.xls ' xls。save(xls_response) 返信xls_response – ShawnMilo

+0

ありがとう、あなたは本当に私の問題を解決しました。あなたの助けを非常に感謝します! –

0

で終了」数式や正確なプレゼンテーションスタイルが必要な場合は、いつでもCSVを使用できます。どのスプレッドシートプログラムでも直接読み取ることができます。私はCSVを生成するいくつかのWebアプリケーションを見たことがありますが、Excelがそれを開くことを確実にするために.XSLと名前をつけています。

+0

私はまた、あなたが読むことができるhtmlファイルを返すことができるところを読んだことがありますが、私は数式とスタイリングを使いたいので、それは良いことではありません。 –

2

XLSファイルはファイル形式のStringIOオブジェクトに保存できます。

レスポンスにStringIOオブジェクトのgetvalue()を返すことができます。ヘッダーを追加して、ダウンロード可能なスプレッドシートとしてマークしてください。

2

あなたは、ダウンロード可能なExcelシートにクエリセットを変換しないFITH serializers.queryset_to_xls()と呼ばれる機能を来たhuDjangoをチェックすることもできます。

6

*** UPDATE:ジャンゴ・エクセル・テンプレートはもはや維持され、代わりにまだ開発中、私はこれを入力しますがhttp://code.google.com/p/django-excel-templates/ DjangoのExcelテンプレートプロジェクトはどのようなあなたの提示を行うことを目的としてMarmir http://brianray.github.com/mm/

を試してみてください。

詳しくは、テストをご覧ください。ここでは、単純なケースである:

# 
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 
関連する問題