Ajuda del LibreOffice 24.8
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()