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 lequel le script peut opérer.

ThisComponent

getDesktop()

Le bureau sur lequel 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 préinstallés LibreLogo, NamedRanges, SetCellColor et TableSample 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é

Comme pour 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 l'interface de programmation d'application LibreOffice (API) ou téléchargez le Kit de développement logiciel LibreOffice (SDK).

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


            import uno, sys, zipimport
            
            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 !