[Résolu][Basic] Equivalent de callByName en VB
Publié : 15 juil. 2009 08:17
Je cherche un equivalent OpenOffice à la fonction callByName que j'utilisais avec VB .
Auriez-vous une piste?
en gros je cherche à faire quelque chose comme :
1 JavaScript dans la bibliothèqe Java (recherche l'existence d'une SUB ... dans un module avec une expression régulière
1 module basic qui contient la SUB CallByName
avec des exemples d'appel
1 autre module basic pour "appeler" le javascript
Merci à ceux qui m'ont mis sur la piste ; à charge de revanche
Auriez-vous une piste?
en gros je cherche à faire quelque chose comme :
Code : Tout sélectionner
sub essai
callByName("nomFonction")
end sub
function nomFonction
......
end function
La solution que j'ai trouvée est dans le fichier jointLe Modérateur a écrit : "Bonjour", "merci", "à bientôt"
La politesse n'est pas une option même sur un forum. L'omettre peut compromettre vos chances d'obtenir une réponse.
http://user.services.openoffice.org/fr/ ... 6050#p6050
Merci de ne pas inventer et de respecter la syntaxe des balises : http://user.services.openoffice.org/fr/ ... c1369.html
Le balisage doit bien sûr être correctement orthographié (première lettre en majuscule puis le reste en minuscules).
1 JavaScript dans la bibliothèqe Java (recherche l'existence d'une SUB ... dans un module avec une expression régulière
Code : Tout sélectionner
//recherche d'un string à l'aide d'une expression régulière
// D.DESMET
sSource = String(ARGUMENTS[0])
sRegExp = String(ARGUMENTS[1])
sGlobUpcase = String(ARGUMENTS[2])
myRe = new RegExp(sRegExp, sGlobUpcase)
ARGUMENTS[0] = sSource.search(myRe)
Code : Tout sélectionner
sub callByName(sFonction as string ,aParams as variant)
dim oDS as object 'objet dispatch helper utilisé pour le call de la sub
dim sURL as string 'string qui contient l'URL de la fonction a appeler
on error goto CallByName_error
'initilisation objet dispatchhelper
oDS = createUnoService("com.sun.star.frame.DispatchHelper")
'initialisation de l'URL du script Basic a appeler : Standard,CallByName."+sFonction+"?language=Basic&location=document
'le script est dans la bibliothèque Standard du document contenant les macro
'le script a appeler est dans le module CallByName
'le nom du script basic a appeller est dans la variable sFonction
sURL = "vnd.sun.star.script:Standard."+getModule(sFonction)+"."+sFonction+"?language=Basic&location=document"
'appel du script
oDS.executeDispatch(ThisComponent.CurrentController.frame,sURL,"",0,aParams())
exit sub
CallByName_error:
on error resume next
msgbox "erreur dans la procédure CallByName"
on error goto 0
end sub
'détermine le module basice de la bibliothèque standard qui contient la sub à exécuter
'-------------------------------------------------------------------------------------
function getModule(sFunction as string) as string
CONST LibraryName = "Standard"
dim oLib as object 'objet libarie Standard
dim aModules() 'tableau de tous les modules de la librairie Standard
dim iC as Integer 'indice de boucle
dim sModule 'le module à analyser (texte basic)
on error goto getModule_error
oLib = BasicLibraries.getByName( LibraryName ) 'initialise l'objet librarie
getModule = ""
aModules = oLib.getElementNames() 'initialise le tableau qui contient tous les modules
for iC = 0 to ubound(aModules) 'pour chacun des modules
sModule = oLib.getByName(aModules(iC)) 'charge le contenu texte du module dans la variable Smodule
if RegExpFind(sModule, sFunction) <> "-1" then
getModule = aModules(iC)
exit function
end if
next iC
exit function
getModule_error:
on error resume next
msgbox "erreur dans la procédure getModule"
on error goto 0
end function
Code : Tout sélectionner
Sub Main
dim aParams(0) as New com.sun.star.beans.PropertyValue 'Les paramètres passés à la fonction, ici 1 paramètre
dim sFonction as string 'Le nom de la fonction passée en paramètre
on error goto Main_error
'Essai n°1, appel de la fonction : MaFonction
'--------------------------------------------
'initialisation du paramètre Nom de la fonction appelée
aParams(0).Name = "Nom"
aParams(0).Value = "Valeur du paramètre transmis à la fonction"
'nom de la fonction a appeler
sFonction = "MaFonction"
CallByName(sFonction,aParams) 'appel de la fonction dont le nom est dans sFonction avec le parametre contenu dans aParams
'Essai n°2 appel de la fonction : MonAutreFonction
'-------------------------------------------------
'initialisation du paramètre Nom de la fonction appelée
aParams(0).Name = "Nom"
aParams(0).Value = "Valeur du paramètre transmis à mon autre fonction"
'nom de la fonction a appeler
sFonction = "MonAutreFonction"
CallByName(sFonction,aParams) 'appel de la fonction dont le nom est dans sFonction avec le parametre contenu dans aParams
exit Sub
Main_error:
on error resume next
msgbox "erreur dans la sub main"
on error goto 0
End Sub
Code : Tout sélectionner
option explicit
global oJSFind as object 'objet javaScript qui recherche une chaine dans une autre à partir
'd'une expression régulière. Cette fonctionnalité n'existe pas en
'basic OO, elle est programmée en JavaScript
function RegExpFind(sModule as String, sFuncOrSuB as String) as variant
'
' recherche dans le moddule sModule, l'existence de la fonction ou sub-routine SFuncOrSub
' retourne -1 si non trouvé
' retourne 0 si trouvé
dim oSP as object 'objet script provider
dim sRegExp as string 'expression régulière recherchant le nom de la fonction ou sub-routine
on error goto RegExpFind_error
'test si l'objet oJSFind est déjà chargé
'---------------------------------------
' if isEmpty(oJSFind) then
'initialisation de l'objet : Java.FindString.js?language=JavaScript&location=document
'le script est écrit en JavaScript
'le script est dans la bibliothèque java du document contenant les macros
'le script s'appelle FindString.js dans cette bibiliothèque
oSP = ThisComponent.getScriptProvider()
oJSFind = oSP.getScript("vnd.sun.star.script:Java.FindString.js?language=JavaScript&location=document")
' end if
'Appelle le JavaScript qui recherche l'existence de la function ou sub dans le module
'------------------------------------------------------------------------------------
sRegExp = "Sub *"+sFuncOrSub 'fabrique l'expression régulière
RegExpFind = oJSFind.invoke(Array(sModule, sRegExp, "gi" ), Array(), Array()) 'appel le javascript
exit function
RegExpFind_error:
on error resume next
msgbox "Erreur dans le sous-programme RegExpFind"
on error goto 0
end function