def export_to_excel(request):
lists = MyModel.objects.all()
# your excel html format
template_name = "sample_excel_format.html"
response = render_to_response(template_name, {'lists': lists})
# this is the output file
filename = "model.csv"
response['Content-Disposition'] = 'attachment; filename='+filename
response['Content-Type'] = 'application/vnd.ms-excel; charset=utf-16'
return response
from django.conf.urls.defaults import *
urlpatterns = patterns('app_name.views',
url(r'^export/$', 'export_to_excel', name='export_to_excel'),
)
<a href="{% url app_name:export_to_excel %}">Export</a>
没有获取下载的文件选项,也没有给出任何错误,但我可以看到日志中的所有结果都正常工作。
答案 0 :(得分:7)
我认为导出excel文件的解决方案是:
if 'excel' in request.POST:
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=Report.xlsx'
xlsx_data = WriteToExcel(weather_period, town)
response.write(xlsx_data)
return response
在此示例中,用于导出的库是xlsxWriter。 这是一个非常完整和实用的解决方案,以及许多其他解决方案:http://assist-software.net/blog/how-export-excel-files-python-django-application。
答案 1 :(得分:4)
这似乎是基于通过更改文件名和MIME类型来欺骗excel打开HTML表的做法。为了使这项工作,HTML文件必须组装一个HTML表,这可能会触发警告,该文件的真实内容与声明的内容不同。
恕我直言,这是一个粗暴的黑客,应该避免。您可以使用xlwt module创建真实的Excel文件,也可以使用csv模块创建真实的CSV文件。
[更新]
在查看您提到的blog post之后,我看到它建议另一个不好的做法:使用除csv模块之外的任何内容来生成CSV文件是危险的,因为如果数据包含分隔符,引号或换行符,则可能最终导致错误的CSV。 csv模块将处理所有极端情况并生成适当的格式化输出。
我见过人们使用Django模板命名文件“something.xls”并使用HTML表格而不是CSV格式,但这也有一些极端情况。
答案 2 :(得分:4)
您似乎正在尝试使用HTML内容生成Excel工作簿。我不知道Excel(或LibreOffice)是否能够打开这样的文件,但我认为这不是正确的方法。
您应该生成一个excel文件:您可以xls
使用csv,xlsx
使用xlwt,import xlwt
wb = xlwt.Workbook()
#use xlwt to fill the workbook
#
#ws = wb.add_sheet("sheet")
#ws.write(0, 0, "something")
response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=the-file.xls'
wb.save(response)
return response
使用openpyxl
文件的内容可以传递给HttpResponse
例如,如果您使用xlwt:
{{1}}
您还可以查看
django-excel-response为您完成所有工作。 (我认为它不支持xlsx格式)
我希望它有所帮助
答案 3 :(得分:4)
除了其他答案中显示的选项外,您还可以使用XlsxWriter创建Excel文件。
请参阅this example。
答案 4 :(得分:1)
将数据导出到XLS文件
如果确实需要导出到.xls文件,请使用它。您将能够添加粗体,字体大小,定义列大小等格式。
首先,安装xlwt模块。最简单的方法是使用pip。
pip install xlwt
views.py
import xlwt
from django.http import HttpResponse
from django.contrib.auth.models import User
def export_users_xls(request):
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="users.xls"'
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('Users')
# Sheet header, first row
row_num = 0
font_style = xlwt.XFStyle()
font_style.font.bold = True
columns = ['Username', 'First name', 'Last name', 'Email address', ]
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num], font_style)
# Sheet body, remaining rows
font_style = xlwt.XFStyle()
rows = User.objects.all().values_list('username', 'first_name', 'last_name', 'email')
for row in rows:
row_num += 1
for col_num in range(len(row)):
ws.write(row_num, col_num, row[col_num], font_style)
wb.save(response)
return response
urls.py
import views
urlpatterns = [
...
url(r'^export/xls/$', views.export_users_xls, name='export_users_xls'),
]
template.html
<a href="{% url 'export_users_xls' %}">Export all users</a>
了解更多有关xlwt模块的信息,请阅读其官方文档。 https://simpleisbetterthancomplex.com/tutorial/2016/07/29/how-to-export-to-excel.html