2017-02-08 59 views
1

我目前有一個使用pd.read_html從網站中提取數據的python腳本。然後我使用df.to_excel設置'xlsxwriter'作爲引擎。Django-使用pd.read_html&df.to_excel創建可下載的excel文件

我正試圖找到一種方法將其納入django webapp。然而,我失去了如何做到這一點,甚至知道如果可能。

我已經看到了一些在django中創建可下載的excel文件的方法,但沒有一個將熊貓作爲在Excel文件中創建數據的驅動力。我創建沒有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

我剛剛進行了一次改變,再次嘗試,沒有任何反應。我也沒有得到任何錯誤。這可能是代碼中其他地方的錯誤。下載應該是基於提交按鈕我的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