2016-06-30 6 views
1

Djangoを使用してダウンロードボタンをサポートするWebページにボタンを作成しています。すでにExcel(.xls)ファイルを生成して保存していますサーバー上で私はcsvライターを使用して、その場で行と列を書いてからレスポンスを返す必要はありませんが、私は単にディスク上のExcelファイルをレスポンスに渡してからレスポンスを返したいと思っています。 .pyはこのようなものです:あなたは、「NAME_OF_FILE.xls」を開こうとしているファイルがある:Djangoを使用してHttpResponseとしてExcelからディスクを戻す方法

def price_list_download(request): 
    today = date.today() 
    filename = 'test_price_list-%s.xls' % today.strftime("%Y-%m-%d") 

    response = HttpResponse(file("PATH_TO_EXCEL.xls")) 
    response['Content-Type'] ='application/vnd.ms-excel' 
    response['Content-Disposition'] = 'attachment; filename="' + filename + '"' 

    return response 

それはダウンロードすることができます、私はダウンロードしたファイルを開こうとしたときに、しかし、それは言ってバナーをポップアップ表示しますファイル拡張子で指定されている形式とは異なる形式で指定します。 ...

.xlsファイルでapplication/vnd.ms-excelというコンテンツタイプを使用する必要があることを再度確認しました。ここで間違ったところが混乱しています。 [はい]をクリックしてこのダウンロードしたファイルを開こうとすると、行0の列0にランダムな文字列(Ïà±)のみが含まれ、残りのファイルは空白です。

お願いします。 おかげ

+0

csvのようなjson互換の形式に変換してから返す必要があります - https://docs.djangoproject.com/ja/1.9/howto/outputting-csv/、http://djangotricks.blogspot.com/ 2013/12/how-to-export-data-as-excel.html、https://github.com/pyexcel/django-excel – dmitryro

+0

リンク先を教えていただきありがとうございます。しかし、そのリンクには既知の制約があります。フォント、色、チャートはサポートされていません。しかし、ダウンロードした.xlsファイルにヘッダーとして1つの画像が残っている必要があります。他のすべてのヘッダーは太字とフォアカラーで強調表示されています。また、このpyexcel/django-excelプロジェクトではバージョン1.7.8以降のDjangoしかテストされていないことに気付きましたが、Djangoはバージョン1.5にとどまっているので、私の状況には役立ちません。他の方法はありますか?どうもありがとう! – FisherCoder

+0

次の例は、https://assist-software.net/blog/how-export-excel-files-python-django-application – dmitryro

答えて

1

OK、問題解決には、私の同僚の1は私を助けた: 私はいけない」の代わりに、私はちょうどHTMLボタンに<a href="RELATIVE_PATH_TO_MY_FILE" type="submit"></a>を使用することができ、のHttpResponseを返すように制約する必要があります。 このようにして、ディスク上のExcelを開いてメモリに読み込んで、HttpResponseに再度書き込む必要はありません。また、Excelですでに生成されている派手なヘッダーと書式のすべての作業を保存します。

ありがとうございます!これが似たようなシナリオで他の人に役立つことを望みたい!

+0

これは参考になりますが、元の質問への直接的な答えは –

関連する問題