Desenvolvimento - Python
Automatização de tarefas do OpenOffice usando o Python
O projeto OpenOffice.org possui uma característica muito útil e pouco utilizada que é a capacidade de integrar seu funcionamento com outros aplicativos...
por Elton Luís MinettoAtualmente existem bindings para as seguintes linguagens:
- C
- C++
- Java
- Python
A utilização do UNO na linguagem python é possível usando-se o Python-UNO (pyUNO). Desde a versão OpenOffice1.1RC4 o pyUNO é incluído por padrão nas instalações do OO.org. No diretório program existe uma versão do python(2.2.2) com acesso ao pyUNO. Neste exemplo é demonstrado um script que executa o OO.org, abre um arquivo de texto com campos específicos, faz a mesclagem (substitui os campos por valores), imprime e fecha o arquivo.
import uno import unohelper import os # Abre o OpenOffice.org usando os parametros para que fique ouvindo na porta 2002 por novas # conexões. O parametro accept é usado para criar uma que clientes tenham acesso a API do # OpenOffice.org através da rede, seja interna ou internet. os.system("soffice "-accept=socket,host=localhost,port=2002;urp;"") # Retorna o componente context do PyUNO runtime localContext = uno.getComponentContext() # Cria o UnoUrlResolver resolver = localContext.ServiceManager.createInstanceWithContext( "com.sun.star.bridge.UnoUrlResolver", localContext) # Conecta ao OO.org em execução ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;" "urp;StarOffice.ComponentContext") smgr = ctx.ServiceManager # Retorna o objeto central do desktop desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop", ctx) # Carrega o documento cwd = os.getcwd() path = os.path.join(cwd, "modelo.sxw") url = unohelper.systemPathToFileUrl(path) doc = desktop.loadComponentFromURL(url, "_blank", 0, ()) # Procura e substituicao # Lista dos dados a alterar # No arquivo modelo.sxw existe dois campos chamados {{{nome}}} e # {{{sobrenome}}}. Estes campos serão substituídos pelo conteúdo das # tuplas abaixo L = [("{{{nome}}}", "Elton", ), ("{{{sobrenome}}}", "Minetto", ), ] # busca e troca for search, replace in L: rd = doc.createReplaceDescriptor() rd.setSearchString(search) rd.setReplaceString(replace) doc.replaceAll(rd) # Imprime uno.invoke(doc, "print", ((), )) res = doc.getPrinter() print res[4] # Fecha o arquivo sem salvar try: doc.close(True) except com.sun.star.util.CloseVetoException: pass #Fecha o OO.org desktop.terminate()
Referências
http://goldenspud.com/blog/2004/Feb/10#build_and_export
http://udk.openoffice.org/python/python-bridge.html