Appel de scripts Python Ă  partir du Basic

L'appel de scripts Python Ă  partir de macros LibreOffice Basic est possible et des fonctionnalitĂ©s prĂ©cieuses peuvent ĂȘtre obtenues telles que :

tip

Une exposition raisonnable à LibreOffice Basic et aux Interface de programmation d'application (API) est recommandée avant d'effectuer les inter-appels linguistiques de Basic à Python, à JavaScript ou à tout autre moteur de script.


Récupération des scripts Python

Les scripts Python peuvent ĂȘtre personnels, partagĂ©s ou intĂ©grĂ©s aux documents. Afin de pouvoir les exĂ©cuter, LibreOffice Basic doit ĂȘtre fourni avec des emplacements de script Python. Localiser les objets UNO conformes Ă  l'interface <link href ="https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1script_1_1provider_1_1XScript.html" name ="script.provider.XScript"> com.sun.star.script.provider.XScript</link > permet l'exĂ©cution des scripts Python :


         Option Explicit
             
         Public Function GetPythonScript(macro As String, _
                 Optional location As String) As com.sun.star.script.provider.Xscript
             ''' Récupérer l'objet de script Python avant l'exécution
             ' Arguments :
             'macro : comme "library/module.py$macro" ou "module.py$macro"
             'emplacement : comme "document", "share", "user" ou ENUM(eration)
             ' RĂ©sultat :
             ' situé le service UNO com.sun.star.script.provider.XScript'''
             If IsMissing(location) Then location = "user"
             Dim mspf As Object ' com.sun.star.script.provider.MasterScriptProviderFactory
             Dim sp As Object ' com.sun.star.script.provider.XScriptProvider compatible
             Dim uri As String
             If location="document" Then
                 sp = ThisComponent.getScriptProvider()
             Else
                 mspf = CreateUNOService("com.sun.star.script.provider.MasterScriptProviderFactory")
                 sp = mspf.createScriptProvider("")
             End If
             uri = "vnd.sun.star.script:"& macro &"?language=Python&location="& location
             GetPythonScript = sp.getScript(uri)
         End Function ' GetPythonScript
      

Exécuter les scripts Python

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.

Syntaxe

workstation_name = script.invoke(Array(), Array(), Array())

opSysName = script.invoke(Array(), in_outs, Array()) ' in_out est une matrice

file_len = script.invoke(Array(systemFilePath), Array(), Array())

normalizedPath = script.invoke(Array(systemFilePath), Array(), Array())

Exemples de scripts incorporés

Les routines ComputerName et GetFilelensont appelées par leurs contreparties Python, en utilisant la fonction GetPythonScript susmentionnée. La gestion des exceptions n'est pas détaillée.


         Option Explicit
         Les propriétés de Option Compatible' sont prises en charge
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get ComputerName As String
             '''Workstation name'''
             scr = GetPythonScript("Platform.py$computer_name", "document")
             ComputerName = scr.invoke(Array(), Array(), Array())
         End Property ' ComputerName
             
         Private Function GetFilelen(systemFilePath As String) As Currency
             '''File size in bytes'''
             scr = GetPythonScript("Os/Path.py$get_size", Script.ISEMBEDDED)
             GetFilelen = scr.invoke(Array(systemFilePath), Array(), Array(),)
         End Function ' GetFilelen
             
         Private Type _SCRIPT_LOCATION
             Script du document ISEMBEDDED As String '
             Script de l'utilisateur ISPERSONAL As String '
             Macro LibreOffice ISSHARED As String '
         End Type ' _SCRIPT_LOCATION
             
         Public Function Script() As Object ' Text enumeration
             Static enums As _SCRIPT_LOCATION : With enums
             If .ISEMBEDDED = "" Then
                 Script du document .ISEMBEDDED = "document" '
                 Scripts de l'utilisateur .ISPERSONAL = "user" '
                 Macro LibreOffice .ISSHARED = "share" '
             End If : End With ' enums
             Script = enums
         End Function ' Script
      

Deux modules Python diffĂ©rents sont appelĂ©s. Ils peuvent ĂȘtre intĂ©grĂ©s dans le document actif ou ĂȘtre stockĂ©s dans le systĂšme de fichier. La vĂ©rification du type d'argument est ignorĂ©e pour plus de clartĂ© :


         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
          
         import platform
          
         def computer_name() -> str:
             return platform.node()
          
         def OSname() -> str:
             return platform.system()
      

         # -*- coding: utf-8 -*-
         from __future__ import unicode_literals
          
         import os.path
          
         def get_size(systemFilePath: str) -> str:
             return str(os.path.getsize(systemFilePath))
          
         def normalyze(systemPath: str) -> str:
             return os.path.normpath(systemPath)
      

Exemples de scripts partagés ou personnels

Le mĂ©canisme d'appel pour les scripts Python partagĂ©s ou personnels est identique Ă  celui des scripts intĂ©grĂ©s. Les noms de bibliothĂšque sont mappĂ©s aux dossiers. Le calcul du profil utilisateur LibreOffice et des chemins d'accĂšs aux fichiers systĂšme des modules partagĂ©s peut ĂȘtre effectuĂ© comme indiquĂ© dans Obtenir les informations de session. Les routines OSName, HelloWorld et NormalizePath ci-dessous, appellent leurs homologues Python, en utilisant la fonction GetPythonScript susmentionnĂ©e. La gestion des exceptions n'est pas dĂ©taillĂ©e.


         Option Explicit
         Les propriétés Option Compatible ' sont prises en charge
             
         Private scr As Object ' com.sun.star.script.provider.XScript
             
         Private Property Get OSName As String
             '''Les noms des plateformes sont "Linux", "Darwin" ou "Windows"'''
             scr = GetPythonScript("Platform.py$OSname", Script.ISPERSONAL)
             OSName = scr.invoke(Array(), Array(), Array()) 
         End Property ' OSName
             
         Private Sub HelloWorld()
             '''Échantillon partagĂ© LibreOffice Python'''
             scr = GetPythonScript("HelloWorld.py$HelloWorldPython", Script.ISSHARED)
             scr.invoke(Array(), Array(), Array(),)
         End Sub ' HelloWorld
             
         Public Function NormalizePath(systemFilePath As String) As String
             '''Supprimez le '\ ..' superflu dans le chemin'''
             scr = GetPythonScript("Os/Path.py$normalyze", "user")
             NormalizePath = scr.invoke(Array(systemFilePath), Array(), Array())
         End Function ' NormalizePath
      

Modules standards Python

Le LibreOffice Python embarqué contient de nombreuses bibliothÚques standards dont vous pouvez bénéficier. Elles portent un ensemble complet de fonctionnalités, telles que mais sans s'y limiter :

Aidez-nous !