Python vers Basic

Contenu
Index 🔎︎

# Appel de Basic depuis Python

Il est possible d'appeler des routines LibreOffice 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'interface de programmation d'applications (Application Programming Interface ou API) LibreOffice et son cadre de script prend en charge l'exécution de scripts inter-langages entre Python et Basic, ou d'autres langages de programmation pris en charge . Les arguments peuvent être transmis dans les deux sens à travers des appels, à condition qu'ils représentent des types de données que les deux langages reconnaissent et en supposant que le cadre 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 LibreOffice 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 Basic intégré% PRODUCTNAME peut être absent. Évitez les appels Python vers% PRODUCTNAME Basic dans un tel contexte. Voir Configurer un Environnement de Développement Intégré (EDI) pour Python

## Récupération de% PRODUCTNAME Scripts Basic

Les macros LibreOffice Basic les macros 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 macro 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

## Executer des Scripts LibreOffice Basic

La documentation du Software Development Kit (SDK) LibreOffice 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

### Syntaxe Python

results = script.invoke((prompt,buttons,title), (), ())

script.invoke((message,), tuple, ())

script.invoke((args), (), results)

### Exemples de scripts personnels ou partagés

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 .

Lors du développement il est possible de stopper l'exécution d'un script à l'aide de l'extension Xray pour inspecter les propriétés et les méthodes d'objets UNO. Le débogueur de l'extension APSO permet l'examen des objets à l'aide de l'extension Xray, ou bien de l'extension de MRI.

    	  def xray(myObject):
    	  	  script = getBasicScript(library="XrayTool", module="_Main", macro="Xray")
    	  	  script.invoke((myObject,), (), ())

### Exemples de scripts intégrés dans des documents

La syntaxe simplifiée *argsPython peut être utilisée conjointement avec les routines LibreOffice Basic qui acceptent un nombre variable d'arguments. Ci-dessous les fonctions Python Print et SUM Python 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 LibreOffice 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()

Rubriques connexes

Appel de scripts Python à partir du Basic

Exemples de programmation Python

Aide des scripts LibreOffice Python

Aide LibreOffice Basic