Django-使用pd.read_html&创建可下载的excel文件。 df.to_excel

时间:2017-02-08 16:07:01

标签: python django excel

我目前有一个python脚本,它使用pd.read_html从站点提取数据。然后我使用df.to_excel将'xlsxwriter'设置为引擎。

我正试图找到一种方法将其合并到django webapp中。但是,我迷失了如何做到这一点,甚至知道如果可能的话。

我已经看到了几种在django中创建可下载的excel文件的方法,但没有一种方法将pandas作为在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')

2 个答案:

答案 0 :(得分:1)

为什么不在Django视图中调用您的pandas函数并将文件保存到/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

答案 1 :(得分: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