2011-07-12 4 views
0

В настоящее время я создаю таблицу с помощью xlwt и пытаюсь экспортировать ее как HttpResponse в django для загрузки пользователем. Мой код выглядит следующим образом:Проблема экспорта файла xls для загрузки с django и HttpResponse

response = HttpResponse(mimetype = "application/vnd.ms-excel") 
response['Content-Disposition'] = 'attachment; filename = %s +".xls"' % u'Zinnia_Entries' 
work_book.save(response) 
return response 

который, кажется, правильный способ сделать это, но я получаю:

Traceback (most recent call last): 
    File "C:\dev\workspace-warranty\imcom\imcom\wsgiserver.py", line 1233, in communicate 
    req.respond() 
    File "C:\dev\workspace-warranty\imcom\imcom\wsgiserver.py", line 745, in respond 
    self.server.gateway(self).respond() 
    File "C:\dev\workspace-warranty\imcom\imcom\wsgiserver.py", line 1927, in respond 
    response = self.req.server.wsgi_app(self.env, self.start_response) 
    File "C:\dev\workspace-warranty\3rdparty\django\core\servers\basehttp.py", line 674, in __call__ 
    return self.application(environ, start_response) 
    File "C:\dev\workspace-warranty\3rdparty\django\core\handlers\wsgi.py", line 252, in __call__ 
    response = middleware_method(request, response) 
    File "C:\dev\workspace-warranty\imcom\imcom\seo_mod\middleware.py", line 33, in process_response 
    response.content = strip_spaces_between_tags(response.content.strip()) 
    File "C:\dev\workspace-warranty\3rdparty\django\utils\functional.py", line 259, in wrapper 
    return func(*args, **kwargs) 
    File "C:\dev\workspace-warranty\3rdparty\django\utils\html.py", line 89, in strip_spaces_between_tags 
    return re.sub(r'>\s+<', '><', force_unicode(value)) 
    File "C:\dev\workspace-warranty\3rdparty\django\utils\encoding.py", line 88, in force_unicode 
    raise DjangoUnicodeDecodeError(s, *e.args) 
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 0: invalid continuation byte. You passed in 

(я ушел от остальных, потому что я получаю очень долго строка этого \ xd0 \ xcf \ x11 \ xe0 \ xa1 \ xb1 \ x1a \ xe1 \ x00 вещей)

У вас есть идеи по поводу чего-то, что может быть не так? Это потому, что некоторые из моих значений записи выглядят так:

work_sheet.write (r, #, information), где информация не передается в unicode?

+0

Ну ... не весь мой код, но часть, где проблема. Я могу предоставить еще несколько, но я не уверен, как создадут ошибку записи или создание рабочей книги. – RJones

ответ

0
response['Content-Disposition'] = 'attachment; filename = %s +".xls"' % u'Zinnia_Entries' 

должно быть просто

response['Content-Disposition'] = 'attachment; filename = %s.xls' % u'Zinnia_Entries' 

без кавычек вокруг .xls в противном случае выход будет

u'attachment; filename = Zinnia_Entries +".xls"' 

Так попытайтесь изменить это.

Но также ознакомьтесь с этим ответом. Он имеет очень полезную небольшую функцию для вывода файлов xls.

django excel xlwt

+0

Завтра я проверю первую часть, и по поводу ссылки я согласен с ней. На самом деле, там, где у меня появилась идея делать то, что я здесь делаю (поскольку содержимое функции во многом совпадает с моим кодом.) – RJones

+0

+ вещь не проблема, но хороший улов с вашей стороны. Благодарим вас за улов. Мало вещей, подобных этому, были проклятием моего существования раньше. – RJones

+0

@RJones - И вы удалили Qoutes? - возможно, тогда дайте нам пример того, какие записи вы пытаетесь сделать. Вы также можете попробовать сделать как можно проще xls (я думаю, что в одном поле есть только какой-то текст). Попробуйте, если это попытается добавить некоторые из данных не-unicode, которые вы пытаетесь написать. Посмотрите, можете ли вы приманить причину ошибки таким образом. – niklasdstrom

0

решаемые проблемы. По-видимому, кто-то положил некоторые напуганные материалы промежуточного слоя, которые были взломаны, добавлены и добавлены, и т.д. ЭСТ. к файлу. Когда это не должно.

В любом случае, при этом файл экспортируется отлично.

@Storm - Спасибо вам за помощь!