Guida di Collabora Office 24.04
È possibile richiamare Collabora Office macro Basic da script Python e si possono ottenere funzioni degne di nota, come ad esempio:
Semplici funzioni di registrazione dalla Trace console della libreria Access2Base,
Funzioni di immissione dati sullo schermo come InputBox e MsgBox basate su Basic per agevolare lo sviluppo di Python,
Chiamate Xray in grado di interrompere l'esecuzione degli script Python per consentire l'ispezione delle variabili.
Lo Application Programming Interface (API) Scripting Framework (Infrastruttura per lo scripting) di Collabora Office supporta l'esecuzione interlinguistica di script tra Python e Basic o altri linguaggi di programmazione supportati per tale scopo. Gli argomenti possono essere passati tra le chiamate avanti e indietro, posto che essi rappresentino tipi di dati primitivi riconoscibili da entrambi i linguaggi, e presupponendo che lo Scripting Framework li converta in modo appropriato.
È consigliabile disporre di una certa conoscenza dei moduli standard Python e delle caratteristiche delle API Collabora Office prima di eseguire funzioni di chiamata tra linguaggi Basic, Python, JavaScript o qualsiasi altro motore di script.
Durante l'esecuzione di script Python da un ambiente di sviluppo integrato (IDE), il motore Basic -Collabora Office incorporato può non essere presente. In tali contesti occorre evitare di eseguire chiamate da Python a Collabora Office Basic, anche se l'ambiente Python e gli Universal Networks Objects (UNO) sono totalmente disponibili. Fate riferimento a Configurazione di un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per Python per ulteriori informazioni.
Le macro Collabora Office Basic possono essere personali, condivise o incorporate nei documenti. Per poterle eseguire Python deve disporre della posizione delle macro Basic. L'implementazione dell'interfaccia com.sun.star.script.provider.XScriptProvider consente il recupero di script eseguibili:
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Prende l'oggetto script Basic prima di invocare.'''
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 documentazione Collabora Office Software Development Kit (SDK) per l'interfaccia com.sun.star.script.provider.XScript specifica la convenzione per le chiamate tra linguaggi. L'invocazione delle funzioni richiede tre matrici:
la prima elenca gli argomenti della routine invocata
la seconda identifica gli argomenti modificati
la terza memorizza i valori restituiti
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Esempi contenuti in Input/output su schermo specificano le chiamate da Python a Basic. Monitoraggio degli eventi del documento illustra l'uso del parametro *args dell'idioma Python per stampare un numero variabile di parametri nella finestra di dialogo della console di registro Access2Base.
Al momento dello sviluppo è possibile interrompere l'esecuzione dello script Python tramite l'estensione Xray per esaminare le proprietà e i metodi degli oggetti UNO. Il debugger dell'estensione APSO consente l'introspezione degli oggetti attraverso l'uso delle estensioni Xray e MRI.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
La sintassi semplificata *args di Python può essere impiegata in combinazione con le routine Collabora Office Basic che accettino un numero variabile di argomenti. Le seguenti funzioni di Python Print, e SUM richiamano le corrispondenti controparti Basic Print e SUM mediante la funzione getBasicScript precedentemente menzionata. La gestione delle eccezioni non è specificata dettagliatamente.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Restituisce le stringhe specificate o le espressioni numeriche in un riquadro di dialogo."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM l'espressione numerica specificata."""
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,)
Le routine Collabora Office Basic Print e SUM basate su documenti accettano un numero variabile di argomenti. Gli attributi Private o Public sono privi di effetto. Il controllo del tipo di argomento viene tralasciato per chiarezza.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Stampa elenco di voci in numero variabile'''
' si accettano tutti gli argomenti convertibili di 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
'''SUM un elenco variabile di numeri '''
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()