Appel de scripts Python à partir du Basic

L'appel de scripts Python à partir de macros Collabora Office Basic est possible et des fonctionnalités précieuses peuvent être obtenues telles que :

tip

Une exposition raisonnable à Collabora Office 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, Collabora Office Basic doit être fourni avec des emplacements de script Python. Localiser les objets UNO conformes à l'interface com.sun.star.script.provider.XScript 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'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.

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 Collabora Office 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 Collabora Office .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 Collabora Office 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é Collabora Office 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 Collabora Office 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 !