为了账号安全,请及时绑定邮箱和手机立即绑定

Django / Pandas - 创建 Excel 文件并作为下载

Django / Pandas - 创建 Excel 文件并作为下载

波斯汪 2023-06-20 15:13:05
我正在尝试使用 pandas 创建一个 Excel 文件,并通过 Django 将其作为可下载文件提供给用户。我就我在此处找到的主题整理了一些不同的答案,最后得到了这段代码:        collection = [{"title": "something", "price": 34, "quantity": 23}, {..}]        output = BytesIO()        df = pd.DataFrame(collection, columns=['title', 'price', 'quantity'])        writer = pd.ExcelWriter(output, engine='xlsxwriter')        df.to_excel(writer, sheet_name='Sheet1')        writer.save()        output.seek(0)        workbook = output.getvalue()        response = StreamingHttpResponse(workbook, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')        response['Content-Disposition'] = f'attachment; filename={output_name}.xlsx'        return response一切正常,直到我尝试打开生成的文件 - 我可能会出错,说文件已损坏或数据格式有问题。我怀疑它可能与二进制数据有关?我该如何解决这个问题?解决方案结果我不得不删除一些东西,所以代码现在看起来像这样并且工作正常:        collection = [{"title": "something", "price": 34, "quantity": 23}, {..}]        output = BytesIO()        df = pd.DataFrame(collection, columns=['title', 'price', 'quantity'])        writer = pd.ExcelWriter(output, engine='xlsxwriter')        df.to_excel(writer, sheet_name='Sheet1')        writer.save()        output.seek(0)        # workbook = output.getvalue()        response = StreamingHttpResponse(output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')        response['Content-Disposition'] = f'attachment; filename={output_name}.xlsx'        return response
查看完整描述

4 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

我认为您可能会使它变得比需要的复杂得多。


以下对我来说很好用:


import pandas as pd

from django.http import HttpResponse


df = pd.DataFrame(data)

response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

response['Content-Disposition'] = 'attachment; filename="filename.xlsx"'                                        

df.to_excel(response)

return response


查看完整回答
反对 回复 2023-06-20
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

解决方案


结果我不得不删除一些东西,所以代码现在看起来像这样并且工作正常:


        collection = [{"title": "something", "price": 34, "quantity": 23}, {..}]


        output = BytesIO()


        df = pd.DataFrame(collection, columns=['title', 'price', 'quantity'])


        writer = pd.ExcelWriter(output, engine='xlsxwriter')

        df.to_excel(writer, sheet_name='Sheet1')

        writer.save()


        output.seek(0)

        # workbook = output.getvalue()


        response = StreamingHttpResponse(output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

        response['Content-Disposition'] = f'attachment; filename={output_name}.xlsx'

        return response


查看完整回答
反对 回复 2023-06-20
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

AI 建议:):


import pandas as pd

from django.http import HttpResponse


df = pd.DataFrame(data)

response = HttpResponse(content_type='application/ms-excel')

response['Content-Disposition'] = 'attachment; filename="my_data.xlsx"'

df.to_excel(response, index=False)

return response


查看完整回答
反对 回复 2023-06-20
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

在 Excel 中打开时可能是数据类型问题,请尝试将数据转换为字符串,然后创建 excel 并尝试。

另一个想法是使用一组样本记录创建文件,而不是整个框架来验证它是否是数据问题。数据集中的 Nan's 也可能存在问题。检查您是否需要忽略/转换/替换它。


查看完整回答
反对 回复 2023-06-20
  • 4 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信