我在我的模板中有这个:
<table>
<tr><td>book_id</td><td>book name</td><td>book_author</td></tr>
{% for book in books %}
<tr><td>{{ book.book_id }}</td><td>{{ book.book_name }}</td><td>{{ book.book_author }}</td></tr>
{% endfor %}
</table>
<a href="/export">Export to Excel !</a>
我的观点似乎是这样的:
def export_excel(request):
books = Book.objects.all()
response = HttpResponse(books , content_type='application/vnd.ms-excel;charset=utf-8')
response['Content-Disposition'] = 'attachment; filename="books.xls"'
return response
这是urls.py
中的mu url:
url(r'^export$', 'export_excel', name='export_excel'),
它将书籍导出到名为books.xls的文件中,这里的问题是它将它们导出为第一个方块中的“书籍对象”(A1)
如果我想将每个“book_attribute”分别放在单独的正方形和每个“book”中,我该怎么办?
答案 0 :(得分:6)
您正在发送名为“books.xls”的内容,并正确地表明它是Excel电子表格......但事实并非如此。您完全错过了实际创建包含数据的Excel电子表格的步骤(这可能是此处工作的80%)。
尝试在网上搜索如何使用Python创建Excel电子表格。
答案 1 :(得分:3)
使用tablib的工作示例,这是一个优秀的表格数据集库。
from django.http import HttpResponse
import tablib
headers = ('Book', 'Author')
data = []
data = tablib.Dataset(*data, headers=headers)
books = Book.objects.all()
for book in books:
data.append((book.book_name, book.author))
response = HttpResponse(data.xls, content_type='application/vnd.ms-excel;charset=utf-8')
response['Content-Disposition'] = "attachment; filename=export.xls"
return response
答案 2 :(得分:0)
我认为问题在于您只需将Book对象列表传递给导出文件即可。
books = Book.objects.all()
这一行只返回一个对象列表。
我想你可能想迭代Book对象的每个属性。 将每个Book对象替换为显示所有字段的元组。 艰难的方法是做类似的事情 books_list = map(lambda x:(x.book_id,x.book_name,....书的所有领域),书籍)
您将books_list传递给导出文件而不是书籍。
答案 3 :(得分:0)
def export_excel(request):
books = Book.objects.all()
response = HttpResponse(books , content_type='application/vnd.ms-excel;charset=utf-8')
response['Content-Disposition'] = 'attachment; filename="books.xls"'
writer = csv.writer(response)
writer.writerow(['Book', 'Author'])
for book in books:
writer.writerow([book.book_name, book.author])
return response
答案 4 :(得分:0)
使用我的插件的解决方案:django_excel
import djang_excel as excel
import pyexcel.ext.xls # in order to handle 'xls' format
# import pyexcel.ext.xlsx # in order to handle 'xlsx' format
# import pyexcel.ext.ods # in order to handle 'ods' format
def export_excel(self, request):
# Book as django model, 'xls' as file format
response = excel.make_response_from_a_table(Book, 'xls')
response['Content-Disposition'] = 'attachment; filename="books.xls"'
return response