Ajuda do LibreOffice 25.2
É possível chamar scripts Python a partir de macros do LibreOffice Basic e obter valiosos recursos, tais como:
Possibilidade de identificar o ComputerName ou detectar o OSName,
A função Basic FileLen() e função API com.sun.star.ucb.SimpleFileAccess.getSize() apresentam o limite de tamanho de 2 GB que o Python pode superar,
com.sun.star.util.PathSettings pode ser normalizado,
e muito mais.
Recomenda-se certo conhecimento dos recursos do LibreOffice Basic e da interface de programação da aplicação (API) antes de executar as chamadas entre a linguagem Basic para Python, para Javascript, ou qualquer outro motor de scripts.
Os scripts em Python podem ser pessoais, compartilhados ou embutidos em documentos. Para executá-los, o LibreOffice Basic deve conhecer as localidades dos scripts Python. Localizar os objetos UNO que verificam a interface com.sun.star.script.provider.XScript permite a execução de scripts Python:
         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Obter o objeto script Python antes da execução
             ' Argumentos:
             '    macro   : como "library/module.py$macro" ou "module.py$macro"
             '    local: como "document", "share", "user" ou ENUM(eração)
             ' Resultado:
             '    localizado o serviço UNO  com.sun.star.script.provider.XScript'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp As Object ' compatível com com.sun.star.script.provider.XScriptProvider
             Dim uri As String
             If location="document" Then
                 sp = ThisComponent.getScriptProvider()
             Else
                 mspf = CreateUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")
                 sp = mspf.createScriptProvider("")
             End If
             uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
             GetPythonScript = sp.getScript(uri)
         End Function ' GetPythonScript
      workstation_name = script.invoke(Array(), Array(), Array())
opSysName = script.invoke(Array(), in_outs, Array()) ' in_out é um Array
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
As rotinas ComputerName, e GetFilelen abaixo chamam suas contrapartidas em Python, utilizando a função GetPythonScript. O tratamento de exceções não é detalhado aqui.
         Option Explicit
         Option Compatible ' Propriedades tem suporte
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Nome da Workstation'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Tamanho do arquivo em bytes'''
             scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
             GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
         End Function ' GetFilelen
             
         Private Type _SCRIPT_LOCATION
             ISEMBEDDED As String ' script do documento
             ISPERSONAL As String ' script do usuário
             ISSHARED As String ' Macro do LibreOffice
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "document" ' script do document
                 .ISPERSONAL = "user" ' script do usuário
                 .ISSHARED = "share" ' Macro do LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      São chamados dois módulos Python diferentes. Podem ser embutidos no documento atual ou armazenados no sistema de arquivos. Por clareza, omitiu-se a verificação dos argumentos:
Platform.py
         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
          
         import platform
          
         def computer_name() -> str:
             return platform.node()
          
         def OSname() -> str:
             return platform.system()
      Os/Path.py
         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
          
         import os.path
          
         def get_size(systemFilePath: str) -> str:
             return str(os.path.getsize(systemFilePath))
          
         def normalyze(systemPath: str) -> str:
             return os.path.normpath(systemPath)
      O mecanismo de chamadas aos scripts Python pessoais ou compartilhados é idêntico ao dos scripts embutidos. Os nomes de bibliotecas são mapeados em pastas. Pode-se computar os caminhos do perfil do usuário do LibreOffice e dos módulos compartilhados em Obter informação da sessão. As rotinas OSName, HelloWorld e NormalizePath abaixo chamam suas contrapartidas em Python, utilizando a função GetPythonScript. O tratamento de exceções não foi detalhado.
         Option Explicit
         Option Compatible ' Propriedades são suportadas
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Nome de plataforma, como «Linux», «Darwin» ou «Windows»'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''exemplo de LibreOffice Python compartilhado'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Eliminar '\..' supérfluo no caminho'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      O Python incluso no LibreOffice contém muitas bibliotecas padrão para proveito. Carregam um rico conjunto de recursos, tais que e não limitados a:
argparse Analisador de opções da linha de comando, argumentos e subcomandos
cmath Funções matemáticas para números complexos
csv Leitura e gravação de arquivos CSV
datetime Tipos de data e hora genuínos
json Codificador e decodificador JSON
math Funções matemáticas
re operações com expressões regulares
socket interface de rede de baixo nível
sys parâmetros e funções específicos do sistema
unittest e trace framework de unidades de teste e tracking de execução do Python
xml.etree.ElementTree API de XML ElementTree