2

我的模板中有这个:

<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

这里是 mu url urls.py

url(r'^export$', 'export_excel', name='export_excel'),

它将书籍导出到名为 books.xls 的文件中,这里的问题是它在第一个正方形(A1)中将它们导出为“书籍对象”

如果我想将每个“book_attribute”放在单独的正方形中,并将每个“book”放在单独的行中,我该怎么办?

4

5 回答 5

6

您正在发送一个名为“books.xls”的东西,并正确地表明它是一个 Excel 电子表格……但事实并非如此。您完全错过了实际创建包含数据的 Excel 电子表格的步骤(这可能是这里工作的 80%)。

尝试在网上搜索如何在 Python 中创建 Excel 电子表格。

于 2013-04-12T14:20:58.560 回答
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
于 2013-08-26T07:41:53.987 回答
0

我认为问题在于您只需将 Book 对象列表传递给您的导出文件。

books = Book.objects.all()

这一行只返回一个对象列表。

我认为您可能想要迭代 Book 对象的每个属性。将每个 Book Object 替换为显示所有字段的元组。困难的方法是做类似 books_list = map(lambda x: (x.book_id, x.book_name, ....all the field of Book), books)

并且您将 books_list 传递给导出文件而不是书籍。

于 2013-04-12T14:16:48.493 回答
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
于 2013-04-12T14:37:48.667 回答
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
于 2015-02-16T10:39:09.710 回答