我有一个Django应用程序,将被放置在Docker容器中。
该应用程序以Dataframe格式准备数据。 我想允许用户将数据下载到本地驱动器作为Excel文件。
我过去曾使用过df.to_excel,但在这种情况下无法使用。
请建议最佳方法来完成此操作。
从 pandas-0.17 开始,您可以直接让 Django 向 BytesIO
写入内容,例如:
from django.http import HttpResponse
from io import <b>BytesIO</b>
def some_view(request):
with BytesIO() as <b>b</b>:
# Use the StringIO object as the filehandle.
<b>writer = pd.ExcelWriter(b, engine='xlsxwriter')</b>
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
# Set up the Http response.
filename = 'django_simple.xlsx'
response = HttpResponse(
b.getvalue(),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = 'attachment; filename=%s' % filename
return response
你可能需要安装一个Excel写入模块(比如 xlsxwriter
或 openpyxl
)。
writer.save()
之后才打印出来的吗? - Willem Van Onsemwriter.save()
之后立即执行b.flush()
会怎样? - Willem Van Onsem我认为现在可以更简单、更简洁。只需直接将http响应传递给Excel写入器即可。以下内容适用于我:
from django.http import HttpResponse
import pandas as pd
# df = CREATE YOUR OWN DATAFRAME
response = HttpResponse(content_type='application/xlsx')
response['Content-Disposition'] = f'attachment; filename="FILENAME.xlsx"'
with pd.ExcelWriter(response) as writer:
df.to_excel(writer, sheet_name='SHEET NAME')
return response
df.to_excel
做了什么,以及为什么它不起作用吗? - Willem Van Onsem