Programmer avec des Scripts Python

Une macro Python est une fonction d'un fichier .py, identifiée comme un module. Contrairement à Basic LibreOffice et à sa douzaine de fonctions ou services d'objets UNO , les macros Python utilisent l'objet unique UNO XSCRIPTCONTEXT , partagé avec JavaScript et BeanShell. Le tuple global g_exportedScripts répertorie explicitement les macros sélectionnables d'un module. Les modules Python possèdent une logique de code autonome et sont indépendants les uns des autres.

Variable globale XSCRIPTCONTEXT

Les fonctionnalités primitives UNO de base peuvent être déduites de la variable globale XSCRIPTCONTEXT . Reportez-vous à l'API Description de XSCRIPTCONTEXT. Les méthodes XSCRIPTCONTEXT se résument comme suit :

MĂ©thodes

Description

Mappées en Basic comme

getDocument()

Le document sur laquelle le script peut opérer.

ThisComponent

getDesktop()

Le bureau sur laquelle le script peut opérer.

StarDesktop

getComponentContext()

Le contexte du composant que le script peut utiliser pour créer d'autres composants UNO.

GetDefaultContext


Les scripts partagés HelloWorld et Capitalise du dossier d'installation illustrent les macros basées sur UNO utilisant la variable globale XSCRIPTCONTEXT .

tip

Le fichier de sortie standard Python n'est pas disponible lors de l'exécution de macros Python depuis le menu Outils - Macros - Exécuter la macro . Reportez-vous à Entrées/ Sorties écran pour plus d'information.


Import de Module

warning

Le contexte XSCRIPTCONTEXT n'est pas fourni aux modules importés.


Les bibliothèques LibreOffice Basic contiennent des classes, des routines et des variables, les modules Python contiennent des classes, des fonctions et des variables. Les éléments communs des fonctionnalités Python ou UNO réutilisables doivent être stockés dans Mes macros et boîtes de dialogue dans (User Profile)/Scripts/python/pythonpath. Les bibliothèques Python aident à organiser les modules afin d'éviter les collisions de noms de modules. Importez uno.py dans les modules partagés.

Les fonctionnalités BASIC UNO primitives peuvent être déduites à l'aide du module uno.py. Utilisez Shell interactif Python pour obtenir une description complète du module en utilisant les Commandes Python dir() et help().

Fonctions

Description

Mappées en Basic comme

absolutize()

Renvoie une URL de fichier absolue à partir des URL données.

createUnoStruct()

Crée une structure UNO ou une exception donnée par typeName.

CreateUNOStruct()

fileUrlToSystemPath()

Renvoie un chemin système.

ConvertFromURL()

getClass()

Renvoie la classe d'une exception, d'une structure ou d'une interface UNO concrète.

getComponentContext()

Renvoie le contexte du composant UNO utilisé pour initialiser le runtime Python.

GetDefaultContext()

Enum()

getConstantByName()

Recherche la valeur d'une constante IDL en donnant son nom explicite.

Voir les groupes de constantes API

isInterface()

Renvoie True, lorsque obj est une classe d'une interface UNO.

systemPathToFileUrl()

Renvoie une URL de fichier pour le chemin système donné.

ConvertToURL()


Les scripts partagés LibreLogo etTableSample de l'installation standard utilisent le module uno.py.

Plus d'exemples Python-Basic

Python UNO

Fonctions UNO Basic

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

obj = smgr.createInstanceWithContext( .. , ctx)

CreateUnoService()

Voir Ouvrir une boîte de dialogue

CreateUnoDialog()

Voir Créer un auditeur (listener)

CreateUnoListener()

Voir types de données UNO

CreateUnoValue()

CreateObject()

EqualUnoObjects()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

GetProcessServiceManager()

def hasUnoInterfaces(obj, *interfaces):

return set(interfaces).issubset(t.typeName for t in obj.Types)

HasUnoInterfaces()

IsUnoStruct()

ctx = uno.getComponentContext()

smgr = ctx.getServiceManager()

DESK = 'com.sun.star.frame.Desktop'

desktop = smgr.createInstanceWithContext(DESK , ctx)

StarDesktop

desktop = smgr.createInstanceWithContext(DESK , ctx)

doc = desktop.CurrentComponent

ThisComponent


Importer un module intégré

De même que LibreOffice Basic qui prend en charge la navigation et le chargement dynamique des bibliothèques, les bibliothèques Python peuvent être explorées et importées à la demande. Pour plus d'informations sur les conteneurs de bibliothèque, visitez LibreOffice Application Programming Interface (API) ou téléchargez Software Development Kit LibreOffice (SDK).

L'importation d'un module intégré au document Python est illustrée ci-dessous, la gestion des exceptions n'est pas détaillée :


            import uno, sys
            
            def load_library(library_name: str, module_name=None):
                "" "Charge la bibliothèque et importe le module
                
                Adapté de  'Bibliothèque de fonctions' par Hubert Lambert
                Ă  https://forum.openoffice.org/fr/forum/viewtopic.php?p=286213"""
                doc = XSCRIPTCONTEXT.getDocument()  # document actuel
                url = uno.fileUrlToSystemPath( \
                    '{}/{}'.format(doc.URL, 'Scripts/python'+library_name))  # ConvertToURL()
                if not url in sys.path:  # ajoute le chemin si nécessaire
                    sys.path.insert(0, url)  # doclib a priorité
                if module_name:  # importe si requis
                    return zipimport.zipimporter(url).load_module(module_name)
            
            def import_embedded_python():
                ui = load_library("my_gui",'screen_io')  # ajoute chemin  <lib>  + importe <module>
                ui.MsgBox(sys.modules.keys())
            
            g_exportedScripts = (import_embedded_python,)  # Public macros
        

Aidez-nous !