Ajuda del LibreOffice 25.2
Podeu cridar les macros bàsiques de LibreOffice des dels scripts de Python, i es poden obtindre característiques destacables a canvi, com ara:
Instal·lacions de registre senzilles fora de la biblioteca Access2Base Consola de seguiment,
Funcions d'E/S per pantalla InputBox i MsgBox basades en Basic per facilitar el desenvolupament en Python
La crida Xray interrompeix l'execució dels scripts Python per ajudar a inspeccionar variables.
The LibreOffice Application Programming Interface (API) Scripting Framework supports inter-language script execution between Python and Basic, or other supported programming languages for that matter. Arguments can be passed back and forth across calls, provided that they represent primitive data types that both languages recognize, and assuming that the Scripting Framework converts them appropriately.
Es recomana tindre coneixement dels mòduls estàndard de Python i de les característiques de l'API de LibreOffice abans de realitzar crides des de Python al Basic, JavaScript o qualsevol altre motor d'scripts.
When running Python scripts from an Integrated Development Environment (IDE), the LibreOffice-embedded Basic engine may be absent. Avoid Python-to-LibreOffice Basic calls in such contexts. However Python environment and Universal Networks Objects (UNO) are fully available. Refer to Setting Up an Integrated IDE for Python for more information.
Les macros LibreOffice Basic poden ser personals, compartides, o incrustades en documents. Per tal d'executar-les, cal proporcionar a l'entorn d'execució de Python les ubicacions de les macro de Basic. Implementar la interfície com.sun.star.script.provider.XScriptProvider permet la recuperació d'scripts executables
<bookmarkvalue>API;script.provider.MasterScriptProviderFactory: Recuperació d'scripts Basic</bookmarkvalue><bookmarkvalue>API;script.provider.XScript Execució d'scripts Basic</bookmarkvalue><bookmarkvalue>API;XScriptProvider Recuperació d'scripts Basic </bookmarkvalue>
		 import uno
		 from com.sun.star.script.provider import Xscript
		     
		 def getBasicScript(macro='Main', module='Module1', library='Standard',
		         isEmbedded=False) -> XScript:
		     '''Obteniu l'objecte script Basic abans d'invocar-lo.'''
		     ctx = uno.getComponentContext()
		     smgr = ctx.ServiceManager
		     if isEmbedded:
		         desktop = smgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx)
		         scriptPro = desktop.CurrentComponent.getScriptProvider()
		         location = "document"
		     else:
		         mspf = smgr.createInstanceWithContext(
		             "com.sun.star.script.provider.MasterScriptProviderFactory", ctx)
		         scriptPro = mspf.createScriptProvider("")
		         location = "application"
		     scriptName = "vnd.sun.star.script:"+library+"."+module+"."+macro+ \
		                  "?language=Basic&location="+location
		     xScript = scriptPro.getScript(scriptName)
		     return xScript
		 La documentació del Software Development Kit (SDK) del LibreOffice corresponent a la interfície com.sun.star.script.provider.XScript detalla la convenció de crides entre llenguatges. La invocació de funcions requereix tres matrius:
el primer llista els arguments de la rutina cridada
el segon identifica els arguments modificats
el tercer emmagatzema els valors retornats
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Exemples a Entrada/Eixida a Pantalla detall de crides d'invocació Python a Basic. El Monitoratge d'esdeveniments dels documents mostra l'ús de *args de Python per imprimir el nombre variable de paràmetres a la consola Access2Base.
En el moment del desenvolupament podeu interrompre l'execució dels scripts en Python utilitzant l' Extensió xray per tal d'inspeccionar propietats i mètodes d'objectes UNO. L'extensió APSO per a la depurarció, permet la introspecció d'objectes utilitzant qualsevol de les extensions Xray o MRI.
	  def xray(myObject):
	  	  script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
	  	  script.invoke((myObject,), (), ())
	  La sintaxi simplificada de Python *args es pot utilitzar conjuntament amb les rutines Basic de LibreOffice que accepten un nombre variable d'arguments. A continuació les funcions Python Printi SUM criden les seues corresponents a Basic Printi SUMutilitzant la funció getBasicScript . La gestió d'excepcions no és detallada.
	  # -*- coding: utf-8 -*-
	  from __future__ import unicode_literals
	      
	  def Print(*args):
	      ""Extreu les cadenes o expressions numèriques especificades en un diàleg."""
	      xScript = getBasicScript("Print", "Scripting", embedded=True)
	      xScript.invoke((args), (), ())
	      
	  def SUM(*args):
	      ""SUMA l'expressió numèrica especificada.""
	      xScript = getBasicScript("SUM", "Scripting", embedded=True)
	      res = xScript.invoke((args), (), ())
	      return res[0]
	      
	  # def getBasicScript()  # see above
	      
	  def playWithArgs():
	      Print("Fun with *args ", -9.81, 297864.681974, 8762E-137)
	      Print(SUM(45, -9.81, 297864.681974))
	      Print(SUM(45, -9.81, 297864.681974, 8762E+137))
	      
	  g_exportedScripts = (playWithArgs,)
	  Les rutines basades en documents de LibreOffice Basic Print and SUM accepten un nombre variable d’arguments. Els atributs Private o Public no tenen efecte. La comprovació del tipus d’arguments s’ignora per tindre més claredat.
	  Option Compatible ' "Standard.Scripting" module
	  Option Explicit
	      
	  Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
	      ''' Imprimeix la llista d'elements en nombre variable '''
	      ' s'accepten tots els arguments convertibles mitjançant CStr()
	      Dim str As String, i As Integer
	      If UBound(args) >= 0 Then
	          For i = 0 To UBound(args)
	              str = str + Cstr(args(i))+ sep 
	          Next i
	      End If
	      Print str
	  End Sub ' Standard.Scripting.Print()
	      
	  Public Function SUM(ParamArray args() As Variant) As Variant
	      ''' SUMA una llista de nombres variable '''
	      Dim ndx As Integer
	      If UBound(args) >= 0 Then
	          For ndx = 0 To UBound(args)
	              SUM = SUM + args(ndx)
	          Next ndx
	      End If
	  End Function ' Standard.Scripting.SUM()