Ajuda do LibreOffice 25.2
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.
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.
O arquivo de saída padrão do Python não está disponível ao executar macros do Python no menu . Consulte Entrada/Saída para tela para mais informações.
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.
| Python UNO | Recursos UNO BASIC | 
|---|---|
| ctx = uno.getComponentContext() smgr = ctx.getServiceManager() obj = smgr.createInstanceWithContext( .. , ctx) | CreateUnoService() | 
| CreateUnoDialog() | |
| Veja Criar um listener | CreateUnoListener() | 
| Veja Tipos de dados UNO | CreateUnoValue() CreateObject() | 
| Use os operadores de comparação "==" ou "!=" | 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 | 
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