Bonjour Redlet,
Message du 2005-08-22 14:20:
Pour accéder à un document OpenOffice.org avec Delphi, j'utilise OLE.
Une fois créé l'objet OLE correspondant à un document, comment exécuter
une macro contenue dans ce document ?
Je pense que tu utilises COM pour manipuler le document.
Pour simplifier, je répondrai en utilisant les routines qu'on trouve
dans la boîte à outils Delphi_OOo disponible sur
<http://fr.openoffice.org/Documentation/How-to/indexht.html>.
On utilise la fonction executeDispatch du service
com.sun.star.frame.DispatchHelper. Le document doit être ouvert en
"visible" (donc pas "Hidden"), afin que le dispatcher soit disponible.
On peut éventuellement rendre ensuite invisible la fenêtre qui s'ouvre.
Le document doit être chargé en utilisant la propriété
MacroExecutionMode avec une valeur permettant l'exécution de macro (voir
livre Programmation OpenOffice.org p.158). Avec Delphi_OOo cela donnera :
PropFich:= CreateProperties(['MacroExecutionMode',
_documentMacroExecModeALWAYS_EXECUTE_NO_WARN]);
monDocument:= StarDesktop.LoadComponentFromURL(adresseFichier, '_blank',
0, PropFich);
Supposons un document appelé MessageBox.sxw contenant une bibliothèque
maBibli, avec dans son Module1 cette macro:
Sub afficher(texte as string)
MsgBox(texte)
End Sub
On lance cette macro ainsi (avec les routines de Delphi_OOo):
execDispatch('macro://MessageBox/maBibli.Module1.afficher(Hello OOo!)',
dummyArray);
La macro affichera « Hello OOo! », c'est-à-dire qu'elle a interprété
tout le texte comme un seul argument.
Les arguments de macro sont séparés par des virgules, chaque argument
étant toujours récupéré par la macro comme un String.
La macro appelée ne peut pas renvoyer d'information à son appelant. Elle
bloque l'exécution de Delphi jusqu'à sa fin d'exécution.
(Testé sur la version 1.1.4)
Bernard
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]