среда, 2 марта 2011 г.

Pytnon UNO + OpenOffice Infra Ресурс

Скажите ну зачем так извращаться?
Ну бывают такие ситуации, когда все остальные варианты не подходят, но решить проблему нужно и стоит вопрос жизни и смерти)))

Так вот, встал у меня вопрос об автоматизации интернет-магазина, нужно скачать с сайта поставщика прайс, перегнать его в CSV и дать обработчику на PHP, который загонит этот прайс в базу данных, переделает цены по текущему курсу доллара, удалит категории, которые не продает этот интернет-магазин. В общем нужно сделать так, чтобы мененджеры плювали в потолок и не мучались по утру с изменением и импортом прайсов, а занимались клиентами. И чтобы покупателям было хорошо, то что прайс обновляется рано рано утром и цены уже актуальны.

Но вот ведь засада, у поставщика кривая генерация прайсов, в прайсе не указана кодировка, файл нормально открывается в инфра-офисе и в экселе (у которых по умолчанию кодировка win1251), что интересно - утилита xls2csv видимо тоже пытается прочитать кодировку файла и вылетает с ошибкой
price.xls is not OLE file or Error

PHPExel тоже без бубна не станет читать такой файл

В общем скачал я скрипт http://www.artofsolving.com/files/DocumentConverter.py

Для его работы нам надо опен-офис и python-uno, опен офис по причине корректной работы с нашим прайсом я поставил от инфра-ресурса, он ставится в директорию /opt, кстати у меня на сервере Debian Squeeze amd64

Сперва запускаем soffice

/opt/openoffice.org3/program/soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headles&


по ссылке выше мы скачали файл DocumentConverter.py
синтаксис у него простой

python DocumentConverter.py price.xls price.csv

(по расширению автоматически определяется формат для конвертирования)
если вы уже написали свой супер-скрипт, который работает напрямую с xls но не хочет работать с определенным прайсом, можно делать конвертацию в тот же формат, тем самым излечивая xls файл от ошибок

кстати забыл, еще для нормальной работы потребуется xvfb

Если у кого то будут вопросы по реализации подобных вещей, пишите в комментах, постараюсь помочь, спасибо за внимание.

Комменты доступны для анонимных юзеров

Комментариев нет:

Отправить комментарий