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]

Répondre à