OpenOffice имеет привязку к python, что позвляет нам пользоваться возможностями OOo из наших скриптов
Причём архитектура OOo позволяет создавать интересные схемы, например:
На удалённом компьютере, собирающем данные, запущен OOoWriter, а с других компьютеров к нему подключаются скрипты и выводят в него данные.
Для этого необходимо, чтобы OpenOffice быз запущен с разрешением на подключение извне, вот так:
soffice "-accept=socket,host=ffadmin.archiv,port=2002;urp;" -write
Эта команда запустит OOo с открытым сокетом на ffadmin.archiv:2002 и откроет пустой документ.
На другом компьютере пишем следующий скрипт:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
sys.path.append('/usr/lib/openoffice/program')
import os
import uno
def print_to_ooo(path,ext):
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve("uno:socket,host=ffadmin.archiv,port=2002;urp;StarOffice.ComponentContext")
smgr = ctx.ServiceManager
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)
model = desktop.getCurrentComponent()
text = model.Text
cursor = text.createTextCursor()
for files in os.walk(path):
text.insertString(cursor, "%s\n"%files[0], 0)
for f in files[2]:
extens=f.split(".")[-1]
if extens in ext:
text.insertString(cursor, "\t%s\t%s"%(extens,f), 0)
if len(sys.argv)>2:
print_to_ooo(sys.argv[1],sys.argv[1:])
В этом скрипте, объявленна функция которая подключается к OOo по заданному адресу и пишет в открытом документе список файлов и папок заданных при запуске скрипта:
./oocalc.py /media/bsd/sdb5/distr/unix/FreeBSD/distfiles/ bz2 zip tgz gz
обратите внимание на вызов скрипта: количество расширений имён файлов ограченно только системными настройками
Начинающим питонёрам возможно будет интересна конструкции
sys.argv[1:] - так функции передаётся список строк состояший из от 2 до последнего элемента списка аргументов вызова скрипта sys.argv
if ext in extens:
text.insertString(cursor, "\t%s\t%s"%(extens,f), 0)
здесь производится проверка, соответсвует ли найденный файл хотя бы одному расширению файла из списка расширений полученно при вызове функции
ext=f.split(".")[-1] - а вот так, строка разбирает на список слов разделённых символом "." и из этого списка выбирается последний элемент - расширение имени файла