2017-02-08 7 views
1

現在、pd.read_htmlを使用してサイトからデータを取得するPythonスクリプトがあります。次に、エンジンとして「xlsxwriter」を設定するdf.to_excelを使用します。Django- pd.read_html&df.to_excelを使用してダウンロード可能なExcelファイルを作成

私はこれをDjango Webアプリケーションに組み込む方法を見つけようとしています。しかし、私はこれを行う方法として、あるいは可能であれば知っていても迷っています。

私はdjangoでダウンロード可能なExcelファイルを作成する方法はいくつか見てきましたが、Excelファイル内にデータを作成する原動力としてpandasを持つものはありません。 djangoなしでExcelファイルを作成するための私のPythonコードは、いくぶん長いので、何を表示するか分かりません。以下は私のパンダのコードの一部です:

以下
 xlWriter = pd.ExcelWriter(excel_sheet2, engine='xlsxwriter') 
     workbook = xlWriter.book 

     money_fmt = workbook.add_format({'num_format': 42, 'align': 'center', 'text_wrap': True}) 
     text_fmt = workbook.add_format({'bold': True, 'align': 'center', 'text_wrap': True}) 



     for i, df in enumerate(dfs): 
      for col in df.columns[1:]: 
       df.loc[df[col] == '-', col] = 0 
       df[col] = df[col].astype(float) 

      df.to_excel(xlWriter, sheet_name='Sheet{}'.format(i)) 

は私templates.htmlコードは

{% block content %} 
<form type="get" action="." style="margin: 0"> 
<input id="search_box" type="text" name="search_box" placeholder="Enter URL..." > 
<button id="search_submit" type="submit" >Submit</button> 
</form> 
{% endblock %} 

あるとそうでないのはなぜこれが私のviews.py

def financials(request): 
    return render(request, 'personal/financials.html') 

    if request.method == 'GET': 
     search_query = request.GET.get('search_box', None) 
     url = search_query 

     dfs = pd.read_html(url, flavor='html5lib') 

答えて

1

の始まりですあなたはDjangoビュー内のあなたのパンダ関数を呼び出し、ファイルを/tmpに保存するだけです。ファイルを取得したら、それを送信してブラウザに応答としてファイルとして扱うように指示することができます。

あなたはその後、私はちょうど私が最終的にそれを思い付いたものを追加したいファイル

from django.http import HttpResponse 

def my_view(request): 
    # your pandas code here to grab the data 
    response = HttpResponse(my_data, content_type='application/vnd.ms-excel') 
    response['Content-Disposition'] = 'attachment; filename="foo.xls"' 
    return response 

https://docs.djangoproject.com/en/dev/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

+0

私はそれを試してもうまくいかなかったと思います。多分私の間違いでした。私はもう一度コードを試します。ただ、明確にするために、 'my_data'というのは、pd.ExcelWriter()を使用して作成したExcelファイルの名前です。私は元の質問を編集して、私のパンダコードの一部をExcelWriterに含めるようにしました。 – gluc7

+0

もう一度試してみると、何も起こりません。私もエラーはありません。コードのどこかで間違いかもしれません。ダウンロードはmy template.htmlの送信ボタンに基づいてトリガされるはずです。おそらく私は正しくそれをviews.pyに渡すつもりはありません。これを私の質問にも追加します。 – gluc7

+0

あなたの財務ビューでは、機能の開始時にすぐに戻ります。実際にパンダのコードを実行することは決してありません。 –

0

を返すことができます作業のすべてを得ました。私のデータをHttpResponseに含めるのではなく、wb.save()コマンド内に応答を含めました。これは、ダウンロードする前にスプレッドシートのフォーマットを含め、すべて正常に動作しています。

wb = load_workbook(excel_sheet2) 

response = HttpResponse(content_type='application/vnd.ms-excel') 
response['Content-Disposition'] = 'attachment; filename= "Data.xlsx"' 

wb.save(response) 

return response 
関連する問題