Пакетная обработка файлов в OpenOffice
Недавно по работе попалась задача: надо было перевести около 115 xlsx файлов в формат пригодный для обработки php скриптом. Из инструментов - php5 и OpenOffice 3.
Пошел копать сеть. Выяснил несколько новых (для себя) вещей:
- в OO 3 штатно входит интерпретатор языка python
- этот "питон" имеет вполне приличный api для работы в OO
- связка python-OO работает
- есть готовый опенсорсный питон-скрипт который позволяет перевести файл одного формата в файл другого, будучи вызван из командной строки
Итак, обо всем по порядку.
Насчет питона. У меня офис установлен в путь по-умолчанию, для него есть такая программа:
"c:\Program Files\OpenOffice.org 3\program\python.exe"
которая является консольным интерпретатором питона, поставляется вместе с самим пакетом.
Документацию по API опенофис-питон можно свободно найти на сайте самого опенофиса, в свое оправдание могу сказать лишь что работаю в ОО на уровне "эникейщика" - но я постепенно учусь.
Если посмотреть примеры работы с ОО из питона с сайта самого ОО (на форуме), то можно убедиться что они работают без всяких правок/переделок (большинство мной опробованных).
Ну и наконец - про главное: смену форматов файлов. Про это я скажу лишь что надо выкачать скрипт для обработки
отсюда, следующей командой запустить ОО работать в режиме "сервера" tcp:
"C:\Program Files\OpenOffice.org 3\program\soffice" -accept="socket,port=8100;urp;"
и запустить сам скрипт на выполнение командой подобной
"C:\Program Files\OpenOffice.org 3\program\python" DocumentConverter.py test.odt test.pdf
Вообще говоря, всё что было до этого абзаца - вольный перевод доки
отюда. :)
Далее - как собственно организовать "пакетность" - т.е. перевести все xlsx (мне удобнее было переводить их в csv) в подкаталогах текущего.
Для начала получим список всех xlsx из командной строки:
>dir *.xlsx /s /b > xlsx.lst
потом обработаем все это примитивным php скриптом:
<?
$l=explode("\n",file_get_content('xlsx.lst'));
foreach ($l as $v)
{
$s1 = trim($v);
$s2 = str_replace('.xlsx','.csv',$s1);
echo "\"C:\Program Files\OpenOffice.org 3\program\python\" DocumentConverter.py \"$s1\" \"$s2\"\n";
}
?>
вывод этого файла перенаправим в xlsx.cmd, положим его рядом с DocumentConverter.py и запустим. Сходим попьем кофе, вернемся и увидим что всё отлично отработало.
Вот так вот, у меня всё получилось - чего и вам всем желаю.