Axuda do LibreOffice 25.8
É posíbel invocar scripts en Python desde as macros en BASIC do LibreOffice, co que se obteñen funcionalidades valiosas, como:
É posíbel identificar ComputerName ou OSName,
A función FileLen() do BASIC e a función da API com.sun.star.ucb.SimpleFileAccess.getSize() presentan un límite superior de tamaño de ficheiro de 2 GB, que Python axuda a superar,
É posíbel normalizarcom.sun.star.util.PathSettings,
e moito máis
Recoméndase unha exposición razoábel ao BASIC do LibreOffice e ás funcionalidades da súa Interface de Programación de Aplicacións (API) con antelación á realización de chamadas inter-linguaxes do BASIC a Python, JavaScript ou calquera outro motor de scripts.
Os scripts en Python poden ser persoais, compartidos ou incorporados aos documentos. Para executalos, o BASIC do LibreOffice precisa coñecer onde están situados os scripts en Python. Localizar os obxectos UNO compatíbeis coa interface com.sun.star.script.provider.XScript permite a execución de scripts en Python:
         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Obter o obxeto do programa en Python antes da execución
             ' Parámetros:
             '    macro   : como "library/module.py$macro" ou "module.py$macro"
             '    posición: como «documento», «compartir», «usuario» ou ENUM(eración)
             ' Resultado:
             '    Atopado o servizo com.sun.star.script.provider.XScript UNO'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp As Object 'compatible con 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 é unha matriz
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
Os subprogramas ComputerName e GetFilelen executan os seus equivalentes en Python, usando a función previamente citada GetPythonScript. Non se describe o control de excepcións.
         Option Explicit
         Option Compatible ' Permitense propiedades
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Nome do ordenador'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''Tamaño do arquivo en octetos'''
             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 ' Programa do documento
             ISPERSONAL As String ' Programa do usuario
             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" ' Programa do documento
                 .ISPERSONAL = "user" ' Programas do usuario
                 .ISSHARED = "share" ' macro do LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      Execútanse dous módulos diferentes de Python. Poden estar incrustados no documento actual ou estar gardados no sistema de ficheiros. Non se comproban os tipos dos parámetros por claridade:
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)
      A forma de executar programas de Python persoais ou compartidos é igual á forma de executar programas incrustados. Os nomes das bibliotecas son enlazadas a cartafoles. Para obter as rutas no sistema de arquivos dos módulos do perfil do usuario e compartidos pódese facer da maneira descrita en Obter información da sesión. No seguinte exemplo os subprogramas OSName, HelloWorld e NormalizePath estan executando as correspondentes subrutinas en Python, usando a función GetPythonScript. Non se describe o control de excepcións.
         Option Explicit
         Option Compatible ' Permitense propiedades
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''O nome das plataformas ten que ser "Linux", "Darwin" ou "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Mostra compartida en Python de LibreOffice'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Eliminar o '\..' innecesario da ruta'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      O Python incrustado en LibreOffice ten moitas bibliotecas que pode aproveitar. Proveen un gran abano de ferramentas, por exemplo:
argparse Intérprete de opcións da liña de comandos, parámetros e subcomandos
cmath Funcións matemáticas para números complexos
csv Leer e escribir arquivos CSV
datetime Tipos de data e tempo verdadeiros
json Codificador e descodificador de JSON
math Funcións matemáticas
re Operacións con expresións regulares
socket Interface de operacións con redes de baixo nivel
sys Funcións e parámetros específicos do sistema
unittest e trace Armazón para os sistemas de probas e para seguir a execución en Python, respectivamente
xml.etree.ElementTree Interface de programación XML do ElementTree