Ayuda de LibreOffice 25.2
Se pueden invocar secuencias de Python desde las macros de LibreOffice Basic y así sacar provecho de funcionalidades como las siguientes:
Posibilidad de identificar el valor de ComputerName o detectar OSName,
Las funciones FileLen() de Basic y com.sun.star.ucb.SimpleFileAccess.getSize() de la API tienen un límite máximo del tamaño de archivo de 2 Gigabytes que se puede superar con Python.
Es posible normalizar com.sun.star.util.PathSettings
y mucho más.
Se recomienda familiarizarse con las prestaciones de LibreOffice BASIC y la interfaz de programación de aplicaciones (API) antes de realizar invocaciones interlenguaje desde BASIC hacia Python, JavaScript u otro motor de ejecución de secuencias de órdenes.
Las secuencias de Python pueden ser independientes, compartidas o estar incrustadas en los documentos. Para ejecutarlas, se deben incluir las ubicaciones de las secuencias de Python en LibreOffice Basic. Ubicando objetos UNO que se ajusten a la interfaz com.sun.star.script.provider.XScript permite que se ejecuten las secuencias de Python.
         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Tomar el objeto con las secuencias de Python antes de ejecutar
             ' Argumentos:
             '    macro   : como «library/module.py$macro» o «module.py$macro»
             '    location: como «document», «share», «user» o ENUM(eración)
             ' Resultado:
             '    localizose el servicio de 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 ' 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 es una matriz
file_len = script.invoke(Array(systemFilePath), Array(), Array())
normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())
Las rutinas que se describen a continuación, ComputerName y GetFilelen, llaman a sus homólogas en Python utilizando la función GetPythonScript ya mencionada. No se detallará el tratamiento de excepciones.
         Option Explicit
         Option Compatible ' Se admiten propiedades
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Nombre de la estación de trabajo'''
             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 del archivo en 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 ' secuencia de órdenes del documento
             ISPERSONAL As String ' secuencia de órdenes del usuario
             ISSHARED As String ' macro de LibreOffice
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 .ISEMBEDDED = "document" ' secuencia de órdenes del documento
                 .ISPERSONAL = "user" ' secuencias de órdenes del usuario
                 .ISSHARED = "share" ' macro de LibreOffice
             End If : End With ' enums
             Script = enums
         End Function ' Script
      Se llaman dos módulos del lenguaje de programación Python. Estos pueden o estar incrustados en el documento actual o estar almacenados en el sistema de archivos. La comprobación de los tipos de argumento se ha omitido para mayor claridad:
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)
      El mecanismo de llamada de las secuencias Python personales o compartidas es idéntico al de las secuencias incrustadas. Los nombres de las bibliotecas se asignan a carpetas. Calcular el perfil de usuario de LibreOffice y las rutas de los archivos de módulos compartidos se puede llevar a cabo como se detalla en Obtener información de la sesión. Las rutinas que se describen a continuación, OSName, HelloWorld y NormalizePath, llaman a sus homólogas en Python utilizando la función GetPythonScript ya mencionada. No se detallará el tratamiento de excepciones.
         Option Explicit
         Option Compatible ' Se admiten propiedades
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Nombre de plataforma, como «Linux», «Darwin» o «Windows»'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''ejemplo de Python compartido en LibreOffice'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Quitar el «\..» superfluo de la ruta'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      La versión de Python incluida en LibreOffice contiene numerosas bibliotecas estándares que puede aprovechar. Entre sus funcionalidades se encuentran:
argparse: analizador sintáctico para opciones, argumentos y subórdenes de consola
cmath: funciones matemáticas para números complejos
csv: lectura y guardado de archivos CSV
datetime: tipos de fecha y hora genuinos
json: codificador y descodificador de JSON
math: funciones matemáticas
re: operaciones con expresiones regulares
socket: interfaz de redes de bajo nivel
sys: parámetros y funciones específicas del sistema
unittest y trace: marco para pruebas unitarias y seguimiento de ejecución para Python
xml.etree.ElementTree: API de ElementTree en XML