Портал Python-программистов

Форумы сайта python.su

Вы не зашли.

Объявление

Официальная wiki коммунити: wiki.python.su обсуждение

Официальная джаббер конференция коммунити: pythonua@conference.jabber.ru (всегда 20-35 онлайн участников). Настройки

КОД ОБОРАЧИВАТЬ В ТЕГИ [code][/code]
  • > TurboGears
  • > Диалоги открытия и сохранения файла. [RSS Feed]

#1 2009-03-16 13:02:09

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Диалоги открытия и сохранения файла.

И снова здравствуйте! Я не дам зачахнуть этому форуму :-)

Ситуация простая: есть функция апдейта базы из эксель-файла, и есть функция экспорта из базы в эксель файл, которые используют xlrd и xlrt соответственно.
Но я что-то никак не могу сообразить, как при импорте и экспорте файла вызывать соответственно диалоги "open file" и "save file as".

В ТГ есть соотв. виджет FileField, но он передает инстанс файла, а мне надо для xlrd только путь к нему, и этот инстанс xlrd не читает, выдает ошибку:

Код:

File "H:\team-ne\team_ne\controllers.py", line 988, in xlread
    sh = fname.sheet_by_index(0)
  File "c:\Python25\lib\cgi.py", line 548, in __getattr__
    raise AttributeError, name
AttributeError: sheet_by_index

где fname - это  инстанс файла, который передается функции.
Вот если бы этот виджет только путь к файлу передавал... Но он не хочет никак.

А насчет "save as" у меня вообще никаких идей, кроме tk или wx, которые в моем случае бесполезны...

Спасите-помогите, пожалста :-) Куда идти читать про это?

(ушла курить ява-скрипт с горя)

Неактивен

 

#2 2009-03-16 14:02:28

PooH
Питонер
Откуда: Барнаул
Зарегистрирован: 2006-12-05
Сообщений: 798
Профиль

Re: Диалоги открытия и сохранения файла.

hildi написал:

Вот если бы этот виджет только путь к файлу передавал... Но он не хочет никак.

Ну сохраните во временный файл, подсуньте ему, а потом времянку удалите

hildi написал:

А насчет "save as" у меня вообще никаких идей, кроме tk или wx, которые в моем случае бесполезны...

А про это вообще не беспокойтесь, это дело броузера, только правильный content-type в response поставте и все

Неактивен

 

#3 2009-03-16 14:30:59

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

Код:

from cherrypy.lib.cptools import serveFile
import os
full_filename = os.path.abspath(filename)
cherrypy.response.headers["Content-Type"] = "application/vnd.ms-excel" 
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=%s'%filename
return serveFile(full_filename)

...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#4 2009-03-16 16:27:14

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

Спасибо большое!

PooH, а как сохранить путь к файлу, если я не могу его получить? Если бы я могла его получить, то я бы его и следующей функции передала...
А в последней строчке после последней запятой вообще не поняла ни слова :-( response - это где? Это надо где-то в head писать?


pythonwin, спасибо!

Код:

  File "H:\team-ne\team_ne\controllers.py", line 1034, in xlopen
    fname = os.path.abspath(filename)
NameError: global name 'filename' is not defined

в этот filename надо что-то подставлять?
ничего не понимаю :-(

Отредактированно hildi (2009-03-16 16:33:42)

Неактивен

 

#5 2009-03-16 16:41:19

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

hildi написал:

в этот filename надо что-то подставлять?

да - это переменная

Код:

filename = 'report.xls'

#
.. здесь тебе нужно создать документ MSExcel и сохранить в например report.xls в папке temp/, которая находится у тебя в проекте
#

from cherrypy.lib.cptools import serveFile
import os
full_filename = os.path.join(os.path.abspath(temp/), filename)
cherrypy.response.headers["Content-Type"] = "application/vnd.ms-excel" 
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=%s'%filename
return serveFile(full_filename)

...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#6 2009-03-16 16:44:16

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

но serveFile я бы рекомендовал использовать если отчет большой, а возможности ПК не большие или например данные в отчете меняются не часто. но отчет запрашивают множество пользователей. то тогда можно в начале метода проверять не устарел ли отчет и если не устарел. то просто отдавать пользователю файл. а если данные изменились. то тогда нужно будет пересоздать файл


...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#7 2009-03-16 17:09:31

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

pythonwin, огромное спасибо!

дело в том, что мне это решение не подходит :-(
Мой код выглядит примерно так:

Код:

    import pyExcelerator as ex
    import cherrypy

   @expose()
   def graph2xl(self, *args):
        w = ex.Workbook()
        sheet = w.add_sheet(u'Rechnungsbericht')
        ex.UnicodeUtils.DEFAULT_ENCODING = 'utf-8'
        row = 6
        year_to = int(year_from)+1
        for k in finance_report:
             sheet.write(row, 1, k.anbieter)
             sheet.write(row, 10, str(year_from))
             sheet.write(row, 22, str(year_to))
             row +=6
        ofile = "H:\\test\\report"+time.strftime('%d-%m-%y_%H-%M-%S')+".xls"
        w.save(ofile)
        redirect("/report?year_from=2008&tg_flash=report exported successfully")

То есть, генерируется файл и тупо сохраняется в заданную директорию. А мне надо, чтобы перед сохранением спросилось, куда сохраняться.

Неактивен

 

#8 2009-03-16 17:12:40

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

pythonwin написал:

но serveFile я бы рекомендовал использовать если отчет большой, а возможности ПК не большие или например данные в отчете меняются не часто. но отчет запрашивают множество пользователей. то тогда можно в начале метода проверять не устарел ли отчет и если не устарел. то просто отдавать пользователю файл. а если данные изменились. то тогда нужно будет пересоздать файл

Все наоборот, к сожалению. Отчет сравнительно небольшой, а запрашивать его будут часто.

Неактивен

 

#9 2009-03-16 22:01:53

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

hildi написал:

То есть, генерируется файл и тупо сохраняется в заданную директорию. А мне надо, чтобы перед сохранением спросилось, куда сохраняться.

а зачем? какая цель? нужно уникальное имя файла?

hildi написал:

Все наоборот, к сожалению. Отчет сравнительно небольшой, а запрашивать его будут часто.

Код:

    import pyExcelerator as ex
    import cherrypy

   @expose()
   def graph2xl(self, *args):
        w = ex.Workbook()
        sheet = w.add_sheet(u'Rechnungsbericht')
        ex.UnicodeUtils.DEFAULT_ENCODING = 'utf-8'
        row = 6
        year_to = int(year_from)+1
        for k in finance_report:
             sheet.write(row, 1, k.anbieter)
             sheet.write(row, 10, str(year_from))
             sheet.write(row, 22, str(year_to))
             row +=6
        filename = "report%s.xls"%time.strftime('%d-%m-%y_%H-%M-%S')
        w.save(filename )
        #redirect("/report?year_from=2008&tg_flash=report exported successfully")
        data = open(filename, 'r').read()
        os.remove(filename)
        cherrypy.response.headers["Content-Type"] = "application/vnd.ms-excel" 
        cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=%s'%filename
        return data

попробуй так


...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#10 2009-03-17 12:00:06

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

Ага... Такое решение мне в голову не пришло. Остроумно :-). Спасибо огромное!

Уникальное имя не то, что бы нужно, но нужно, чтобы оно содержало дату и время экспорта. Я секунды только для себя приписала, а то тыцаю ведь во время написания кода по 30 раз в минуту, так чтобы оно сильно не возмущалось.

Я решила это сохранением файла на сервере и генерирования к нему ссылки для скачивания. Как обычно, правой ногой левое ухо :-)
Так гораздо красивее, конечно! Еще раз спасибо!

*ушла пробовать*

Неактивен

 

#11 2009-03-17 12:42:02

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

hildi написал:

Спасибо огромное!

пожалуйста smile


...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#12 2009-03-17 14:43:01

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

Не работает... Почему-то не пишутся данные в файл и выскакивает ошибка "неизвестный формат файла".
Сам файл содержит только одно слово: "ÐÏࡱ".

Эх. Пес с ним, в общем.

Спасибо в любом случае :-)

Неактивен

 

#13 2009-03-17 16:54:34

pythonwin
Команда
Откуда: за компом
Зарегистрирован: 2006-07-18
Сообщений: 1293
Профиль

Re: Диалоги открытия и сохранения файла.

попробуй

Код:

data = open(filename, 'rb').read()

и попробуй закоментировать os.remove и открыть файл сохраненный временный файл.


...мир скучен для скучных людей. Сократ.
язык Python
framework TurboGears
форум по TurboGears

Неактивен

 

#14 2009-03-17 17:11:49

hildi
Питонер
Зарегистрирован: 2008-10-07
Сообщений: 64
Профиль

Re: Диалоги открытия и сохранения файла.

Точно, спасибо!!

Неактивен

 
  • > TurboGears
  • Диалоги открытия и сохранения файла. [RSS Feed]

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

Board footer

Реклама: