2017-05-21 65 views
2

サーバ側でExcelファイルが生成され、クライアント側でダウンロードされるようにするdjangoアプリがあります。 JavaScriptにAjaxコールでリクエストを送信していますが、サーバーに行くとダウンロードが必要なExcelが生成されます。 ビューは、クライアントでファイルにダウンロードできるhtmlにExcelファイルを送信するHTTPレスポンスを生成する必要がありますExcelファイルをdjangoビューからhtmlに戻してクライアントにダウンロードします。

答えて

1

考えられるほど複雑ではありません。実際、私が理解するように、あなたはDjangoモデルを持っており、例えばインスタンスのデータを.xlsxファイルでエクスポートする必要があります。

import openpyxl 
from openpyxl.utils import get_column_letter 
from django.http.response import HttpResponse 

def method(request, **kwargs): 
    queryset = ModelName.objects.filter() # adjust accordingly 

    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
    response['Content-Disposition'] = 'attachment; filename=this-is-your-filename.xlsx' 
    wb = openpyxl.Workbook() 
    ws = wb.get_active_sheet() 
    ws.title = "Your Title" 

    row_num = 0 

    columns = [ 
     ("ID", 5), 
     (u'Name', 20), 
    ] 

    for col_num in range(len(columns)): 
     c = ws.cell(row=row_num + 1, column=col_num + 1) 
     c.value = columns[col_num][0] 
     ws.column_dimensions[get_column_letter(col_num + 1)].width = columns[col_num][1] 

    for obj in queryset: 
     row_num += 1 
     row = [ 
      obj.pk, 
      obj.name, 
     ] 
     for col_num in range(len(row)): 
      c = ws.cell(row=row_num + 1, column=col_num + 1) 
      c.value = row[col_num] 

    wb.save(response) 
    return response 

あなたが最初pip install openpyxlopenpyxlのlibにインストールする必要がありますのでご注意ください:

は、私は、次の簡単な解決策をお勧めしたいです。

+0

実際にはxlsxwriterを使用してExcelファイルを生成し、サーバーに保存しています。この保存された.xlsxファイルをhttp応答として送信できますか? – INDER

+0

私はあなたがそれをすることができない理由を考えることができません。レスポンスに 'Content-Disposition' HTTPヘッダーと正しい' content_type'を設定する必要があります。 –

+0

ありがとう....私はこれを一度試してみるつもりです。また、何かをhtmlでも追加する必要がありますか、返信応答は自動的にファイル – INDER

関連する問題