[Tous] Easydev : interfaçage Basic et Python

Tout savoir sur les extensions et aller plus loin avec vos suites bureautiques préférées.
Les questions sur la programmation des OXT doivent être postées dans la section Macros située plus bas.

Modérateur : Vilains modOOs

Règles du forum
Cette section est faite pour présenter des extensions visant à améliorer ou ajouter des fonctionnalités.
Vous pouvez commenter ou ajouter des remarques sur l'extension. Mais, si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du logiciel où se produit le problème (Writer, Calc, Impress, Draw, Math ou Base).
Si vous désirez publier une extension, merci de contacter un modérateur par MP.
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 620
Inscription : 10 août 2017 00:15

[Tous] Easydev : interfaçage Basic et Python

Message par Jurassic Pork »

EasyDev de notre ami mexicain Mauricio Baeza (membre du forum espagnol d’OpenOffice) est une extension qui permet d’étendre les possibilités sur les macros en basic dans L.O et A.O.O et de faciliter aussi leur écriture. Le coeur de l’extension est écrit en langage python.
L 'extension est disponible ici  (choisir la version du fichier oxt la plus récente, c’est celle qui est en cours de développement), la documentation en français ici. Dans la documentation, il y a la plupart des fonctions accessibles par l’extension avec un exemple de programmation en Basic.
Je me propose de vous présenter quelques unes des fonctions les plus intéressantes.
1 – CallMacro : L’appel de macro
La fonction callMacro permet d’appeler tout type de macro de n’importe quel langage se situant n’importe où.
Syntaxe d’interface :
any callMacro([in] org::universolibre::EasyDev::Macro macro, [in] sequence< any > args);
Macro est une structure uno :
published struct Macro
{
string Library;
string Module;
string Dialog;
string Name;
string Language;
string Location;
boolean Thread;
};
sequence< any > args représente un tableau (sequence) de variants (any) .
Exemples : Array() pas d’arguments . Array(cell) la variable cell est passée en argument à la macro.
La macro peut retourner quelque chose qui est de type variant.

Voici un exemple pour appeler la macro HelloWord qui se trouve dans le module Examples dans la bibliothèque Basic EasyDevLib (installée avec l’installation de EasyDev).

Code : Tout sélectionner

util = createUnoService("org.universolibre.EasyDev")
macro = createUnoStruct("org.universolibre.EasyDev.Macro")
macro.Library = "EasyDevLib"
macro.Module = "Examples"
macro.Name = "HelloWorld"
macro.Language = "Basic"
macro.Thread = False
util.callMacro(macro, Array())
Le membre Location n’est pas ici utilisé. Si location n’est pas précisée on va chercher la macro dans mes macros ou les macros LibreOffice. Pour appeler une macro dans le document en cours, il faut mettre Location à document.

2 – Timer : La fonction Timer
Cette fonction permet de programmer un timer qui appelle une macro tous les x secondes.
Syntaxe d’interface :
void timer([in] string name, [in] unsigned short wait, [in] org::universolibre::EasyDev::Macro macro, [in] sequence< any > args);
name est le nom du timer. Très important pour pouvoir le stopper par stopTimer.
Wait est le temps en secondes qui sépare chaque exécution de la macro .
Macro est la macro appelée (voir syntaxe de callMacro)
Exemple dans fichier exemple.
Attention cette fonction peut se révéler dangereuse si vous l’utilisez mal. Le timer est lancé dans un thread et donc le seul moyen de l’arrêter est de le stopper par la commande stopTimer avec le nom du timer. Si vous avez un timer « fou » que vous n’arrivez plus à arrêter (erreur de code, lancer deux fois un timer avec un même nom) la seule façon de s’en sortir est de tuer LibreOffice ou OpenOffice par le gestionnaire de tâche.


3 – Execute : La fonction execute
Cette fonction permet d’exécuter une commande système et surtout de récupérer ce qui s’affiche à l’écran pendant l’exécution de la commande.
Syntaxe d’interface :
any execute([in] sequence< string > args, [in] boolean wait);
args est un tableau qui contient l’exécutable à lancer et ses options.
wait permet d’attendre la fin d’exécution (dans le cas où il y a un résultat par exemple) ou pas de ce qui est lancé.
Voici un exemple pour lancer la commande ls -la et afficher le résultat .

Code : Tout sélectionner

util = createUnoService("org.universolibre.EasyDev")
res = util.execute(Array("ls","-la"), True)
util.msgbox(res)
4 – SetData : Transférer un tableau de données dans une feuille Calc
Syntaxe d’interface :
void setData([in] any cell, [in] any data);
Cette fonction permet de transférer (en une seule fois) un tableau de données du Basic dans des cellules d’une feuille Calc.
Exemple dans fichier exemple.


5 – Requests : Récupérer des données d’un site web.
Cette fonction permet de récupérer du contenu de sites Web.
Syntaxe d’interface :
Response requests([in] org::universolibre::EasyDev::Requests data);
Response et Requests sont des structures.
any correspond au type Variant en Basic.
Exemple dans fichier exemple.

Pour illustrer mes propos j’ai mis en pièce jointe un fichier calc qui utilise des macros se servant de EasyDev.
J’ai testé les macros qui se trouvent dans le fichier avec LibreOffice 5.2.7.2 et OpenOffice 4.1.3 sous Windows 7 et LibreOffice 5.4.2.2 sous Ubuntu 16.04

Dans le fichier calc joint :
Quand vous appuyez sur le bouton StartTimers il y a deux timers qui se mettent en route, un qui incrémente (toutes les secondes) et un qui décrémente (toutes les deux secondes). Quand le timer qui incrémente arrive à 10 il est arrêté. Quand celui qui décrémente arrive à 0 il est arrêté. On peut arrêter les timers en cours d’exécution par le bouton StopTimers. On peut faire des choses sur la feuille pendant l’exécution des deux timers.
Le bouton Execute va vous lancer une commande qui retourne la version de l’O.S (attention pour linux la commande utilisée peut ne pas fonctionner sur tous les systèmes (testé avec une distrib Debian).
Le bouton SetData va vous envoyer un tableau dans la feuille à partir de la cellule A7.
Il y a d’autres macros à lancer par exécuter la macro.
EasyDev.gif
EasyDev.gif (98.13 Kio) Consulté 9094 fois
Voilà j’espère ne pas avoir été trop long. Pour explorer toutes les possibilités de l’extension je vous invite à lire la documentation. Si vous avez des succès ou des échecs sur l’installation ou sur l’utilisation sous d’autres O.S (par exemple MAC O.S) ou d’autres versions n’hésitez pas à le faire savoir.
Si vous avez des questions, des suggestions, des bugs rencontrés, des remarques à faire n’hésitez pas à le faire, je suis en contact avec l’auteur de l’extension et il est dans un forum voisin. Je ne parle pas espagnol mais nous arrivons à nous comprendre en anglais.

Ami calmant, J.P
Pièces jointes
TestEasyDev.ods
(18.52 Kio) Téléchargé 451 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Répondre