Contenu

# 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 :

- L'identification ComputerName ou la détection de OSName sont possibles,

- La fonction Basic FileLen() et com.sun.star.ucb.SimpleFileAccess.La fonction API getSize() présenter une limite supérieure de taille de fichier de 2 gigaoctets que Python aide à surmonter,

- com.sun.star.util.PathSettings peut être normalisé,

- et bien plus.

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 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) LibreOffice 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 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é :

- Platform.py

             # -*- coding: utf-8 -*-
             from __future__ import unicode_literals

             import platform

             def computer_name() -> str:
                 return platform.node()

             def OSname() -> str:
                 return platform.system()

- Os/Path.py

             # -*- 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 :

- argparse Analyseur pour les options de lignes de commande, les arguments et les sous-commandes

- cmath Fonctions mathématiques pour les nombres complexes

- csv Pour écrire et lire des fichiers CSV

- datetime Véritables types de date et d'heure

- json Encodeur et décodeur JSON

- math Fonctions mathématiques

- re Opérations d'expressions régulières

- socket Interface réseau de bas niveau

- sys Fonctions et paramètres spécifiques au système

- unittest et trace Cadre de test unitaire et exécution de Track Python

- xml.etree.ElementTree API XML ElementTree

Rubriques connexes

Appel de Basic depuis Python

Aide LibreOffice Basic

Aide des scripts LibreOffice Python

Aidez-nous !