Aide Collabora Office 24.04
Il est possible d'appeler des routines Collabora Office Basic depuis un script Python, et de profiter de fonctions telles que :
Fonctions de trace à l'aide la la console d'Access2Base,
Développement Python plus aisé à l'aide des fonctions d'entrée/sortie à l'écran MsgBox et InputBox,
Interruption de l'exécution du script Python par appel de Xray pour examiner les variables.
L'environnement de script de l'interface de programmation d'application (API) Collabora Office prend en charge l'exécution de scripts inter-langages entre Python et Basic, ou d'autres langages de programmation pris en charge d'ailleurs. Les arguments peuvent être passés dans les deux sens entre les appels, à condition qu'ils représentent des types de données primitifs que les deux langages reconnaissent et en supposant que la structure de script les convertit de manière appropriée.
Il est recommandé d'avoir une bonne connaissance des modules standard Python et des fonctionnalités de l'API Collabora Office avant d'effectuer des appels inter-langages de Python vers Basic, JavaScript ou tout autre moteur de script.
Lors de l'exécution de scripts Python à partir d'un environnement de développement intégré (IDE), le moteur de base intégré à Collabora Office peut être absent. Évitez les appels Python vers Collabora Office Basic dans de tels contextes. Cependant, l'environnement Python et les objets universels de réseaux (UNO) sont entièrement disponibles. Reportez-vous à Configuration d'un IDE intégré pour Python pour plus d'informations.
Les macros Collabora Office Basic peuvent être personnelles, partagées ou intégrées dans des documents. Pour les exécuter, le Runtime Python doit être fourni avec les emplacements des macros Basic. Mettre en œuvre l'interface com.sun.star.script.provider.XScriptProvider permet la récupération de scripts exécutables.
import uno
from com.sun.star.script.provider import Xscript
def getBasicScript(macro='Main', module='Module1', library='Standard',
isEmbedded=False) -> XScript:
'''Récupérer l'objet script Basic avant l'invocation.'''
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 documentation du Software Development Kit (SDK) Collabora Office pour l'interfacecom.sun.star.script.provider.XScript détaille la convention d'appel pour les appels inter-langages. L'invocation de fonctions nécessite trois tableaux :
le premier liste les arguments de la routine appelée
le second identifie les arguments modifiés
le troisième stocke les valeurs retournées
results = script.invoke((prompt,buttons,title), (), ())
script.invoke((message,), tuple, ())
script.invoke((args), (), results)
Les exemples dans Input/Output to Screen détaillent des appels Python vers Basic. Monitoring Document Events illustre l'utilisation de l'idiome Python *args pour imprimer un nombre variable de paramètres dans la boîte de dialogue de la console de journalisation Access2Base .
Au moment du développement, vous pouvez interrompre l'exécution du script Python en utilisant l'extension Xray afin d'inspecter les propriétés et les méthodes des objets UNO. L' extension débogueur APSO permet l'introspection d'objets à l'aide des extensions Xray ou MRI.
def xray(myObject):
script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
script.invoke((myObject,), (), ())
La syntaxe simplifiée *argsPython peut être utilisée conjointement avec les routines Collabora Office Basic qui acceptent un nombre variable d'arguments. Ci-dessous les fonctions Python Print et SUM appellent leurs homologues Basic Print et SUM, en utilisant la fonction getBasicScript susmentionnée. La gestion des exceptions n'est pas détaillée.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
def Print(*args):
"""Génère les chaînes ou expressions numériques spécifiées dans une boîte de dialogue."""
xScript = getBasicScript("Print", "Scripting", embedded=True)
xScript.invoke((args), (), ())
def SUM(*args):
"""SUM l'expression numérique spécifiée."""
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 routines Collabora Office Basic Print et SUM basées sur les documents acceptent un nombre variable d'arguments. Les attributs Private ou Public n'ont aucun effet. La vérification du type d'arguments est ignorée pour plus de clarté.
Option Compatible ' "Standard.Scripting" module
Option Explicit
Private Sub Print(ParamArray args() As Variant, Optional sep As String = " ")
''' Imprimer la liste des éléments du numéro de variable '''
' tous les arguments convertibles CStr() sont acceptés
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 une liste variable de nombres'''
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()