Programando com scripts Python

Uma macro Python é uma função dentro de um arquivo .py, identificada como um módulo. Ao contrário do LibreOffice Basic e sua dúzia de funções ou serviços de objetos UNO, as macros Python usam o objeto único XSCRIPTCONTEXT UNO, compartilhado com JavaScript e BeanShell. A tupla global g_exportedScripts lista explicitamente as macros selecionáveis de um módulo. Os módulos Python possuem lógica de código autônomo e são independentes um do outro.

Variável Global XSCRIPTCONTEXT

As instalações UNO básicas genuínas podem ser inferidas da variável global XSCRIPTCONTEXT. Consulte a API do LibreOffice para obter uma descrição completa do XSCRIPTCONTEXT. Os métodos XSCRIPTCONTEXT se resumem como:

Métodos

Descrição

Mapeado no Basic como

getDocument()

A referência do documento na qual o script pode operar.

ThisComponent

getDesktop()

A referência da área de trabalho na qual o script pode operar.

StarDesktop

getComponentContext()

O contexto do componente que o script pode usar para criar outros componentes do uno.

GetDefaultContext


Os scripts HelloWorld e Capitalise compartilhados da instalação ilustram as macros relacionadas a UNO que usam a variável global XSCRIPTCONTEXT.

tip

O arquivo de saída padrão do Python não está disponível ao executar macros do Python no menu Ferramentas - Macros - Executar Macro. Consulte Entrada/Saída para tela para mais informações.


Importar módulos

warning

XSCRIPTCONTEXT não é fornecido para módulos importados.


As bibliotecas BASIC do LibreOffice contém classes, rotinas e variáveis. Os módulos Python contém classes, funções e variáveis. Os trechos comuns de recursos reutilizáveis Python e UNO devem ser armazenados no contêiner Minhas Macros em (perfil do usuário)/Scripts/python/pythonpath. As bibliotecas Python ajudam a organizar os módulos para evitar colisão de nomes. Importe uno.py nos módulos compartilhados.

Os recursos genuínos do UNO BASIC podem ser inferidos utilizando o módulo uno.py. Utilize o interpretador interativo Python para ter uma descrição completa do módulo utilizando os comandos Python dir() e help().

Funções

Descrição

Mapeado no Basic como

absolutize()

Retorna um URL de arquivo absoluto dos URLs fornecidos.

createUnoStruct()

Cria uma estrutura ou exceção UNO dada por typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Retorna um caminho do sistema.

ConvertFromURL()

getClass()

Retorna a classe de uma exceção concreta, struct ou interface UNO.

getComponentContext()

Retorna o contexto do componente UNO usado para inicializar o tempo de execução do Python.

GetDefaultContext()

Enum()

getConstantByName()

Procura o valor de uma constante de IDL dando seu nome explícito.

Veja grupos de constantes da API

isInterface()

Retorna Verdadeiro, quando obj é uma classe de uma interface UNO.

systemPathToFileUrl()

Retorna um URL de arquivo para o caminho do sistema especificado.

ConvertToURL()


Os script pré-instalados LibreLogo, NamedRanges, SetCellColor e TableSample utilizam o módulo uno.py.

Mais amostras de Python-Basic

Python UNO

Recursos UNO BASIC

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Veja Abrir uma caixa de diálogo

CreateUnoDialog()

Veja Criar um listener

CreateUnoListener()

Veja Tipos de dados UNO

CreateUnoValue()

CreateObject()

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


Importar um módulo incorporado

Semelhante ao LibreOffice Basic, que suporta navegação e carregamento dinâmico de bibliotecas, as bibliotecas Python podem ser exploradas e importadas sob demanda. Para obter mais informações sobre contêineres de biblioteca, visite LibreOffice Application Programming Interface (API) ou baixe o LibreOffice Software Development Kit (SDK).

Abaixo, demonstra-se um módulo incorporado num documento Python, a manipulação de exceção não é detalhada:


            import uno, sys, zipimport
            
            def load_library(library_name: str, module_name=None):
                """ carregando biblioteca e importando módulo
                
                Adaptado de 'Bibliothèque de fonctions' de Hubert Lambert
                em https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # document atual
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # adicione o caminho se necessário
                    sys.path.insert(0, url)  # doclib tem precedência
                if module_name:  # importe se for pedido
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # adicione <lib> path + import <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

♥ Doe para nosso projeto! ♥