Bonjour,
Je cherche à affecter une valeur à une propriété d'un pseudo objet, connaissant le nom de la propriété dans une chaine de caractères. Je comprends qu'il faudrait pour cela utiliser une méthode introspective comme par exemple le propose la méthode setPropertyValue du service XPropertySet.
Le problème est que je n'arrive pas à mettre en oeuvre le service XPropertySet sur un module pseudo objet créé par moi. Je comprends que ce service pourrait être utilisé sur des objets instanciés par Uno, alors j'ai bien cherché à utiliser CreateIObject pour instancier un service (objet) de type Bean qui aurait pu supporter ce service mais je n'ai rien trouvé de semblable dans l'interface Uno proposée...
Quelqu'un connaitrait-il une solution pour attribuer la valeur à une propriété d'un pseudo objet, ou même une structure, connaissant le nom de cette propriété dans une chaine de caractères ?
Merci pour votre aide.
[Résolu][Basic] setPropertyValue pour les pseudos objets ?
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
[Résolu][Basic] setPropertyValue pour les pseudos objets ?
Dernière modification par micmac le 16 mai 2019 21:19, modifié 4 fois.
Raison : Ajout de la coche verte
Raison : Ajout de la coche verte
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Basic] setPropertyValue pour les pseudos objets ?
Bonjour,
Parmi les fonctions non documentées d'OpenOffice et Libreoffice (la plupart venant du monde du VBA) existe la fonction CallByName, qui pourrait répondre à ton besoin si je l'ai bien compris.
Un petit exemple :
Cordialement.
Parmi les fonctions non documentées d'OpenOffice et Libreoffice (la plupart venant du monde du VBA) existe la fonction CallByName, qui pourrait répondre à ton besoin si je l'ai bien compris.
Un petit exemple :
Code : Tout sélectionner
Sub Main
doc = thiscomponent
print CallByName(doc, "Title", 2)
'print doc.Title
End Sub
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Re: [Basic] setPropertyValue pour les pseudos objets ?
Super ! C'est exactement ce que je cherchais ...
Mais après un test ce soir je comprends que ce n'est vraiment pas simple à utiliser car je comprends que ce n'est pas vraiment une fonction Ooo mais plutôt une function Visual Basic (Microsoft) utilisable par le biais du module de comaptibilité. Aussi je n'arrive pas à l'utiliser car mon programme plante sur l'appel de la première ligne de setOOoProp, c'est-à-dire : Set oSM = CreateObject("com.sun.star.ServiceManager")
Voici l’extrait de mon code : La funciton SetOOoProp est nécessaire pour mettre en forme l'argument utilisé dans CallByName ...
Je marque le fil terminé.
Mais après un test ce soir je comprends que ce n'est vraiment pas simple à utiliser car je comprends que ce n'est pas vraiment une fonction Ooo mais plutôt une function Visual Basic (Microsoft) utilisable par le biais du module de comaptibilité. Aussi je n'arrive pas à l'utiliser car mon programme plante sur l'appel de la première ligne de setOOoProp, c'est-à-dire : Set oSM = CreateObject("com.sun.star.ServiceManager")
Voici l’extrait de mon code : La funciton SetOOoProp est nécessaire pour mettre en forme l'argument utilisé dans CallByName ...
Code : Tout sélectionner
' #PUBLIC METHOD# ==================================================================
' Name...........: setOOoProp
' Description ...:
' Parameters ....:
' Syntax ........:
' Return values .:
' Author ........:
' Modified.......:
' Remarks .......:
' Related .......:
' Link ..........:
' Example .......:
Function setOOoProp(cName As String, uValue As Variant) As Object
Dim oPropertyValue As Object
Dim oSM As Object
Set oSM = CreateObject("com.sun.star.ServiceManager")
Set oPropertyValue = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
oPropertyValue.Name = cName
oPropertyValue.Value = uValue
Set setOOoProp = oPropertyValue
End Function
' #PUBLIC METHOD# ==================================================================
' Name...........: SetValue
' Description ...:
' Parameters ....:
' Syntax ........:
' Return values .:
' Author ........:
' Modified.......:
' Remarks .......:
' Related .......:
' Link ..........:
' Example .......:
Public Sub SetValue(UnoObject As Object, Value As Variant)
On local error goto Erreur
If _TUOFIsAccessible Then
Dim arg As Variant
arg = setOOoProp("Titre", "TEST")
CallByName(UnoObject, _TUOFFieldName, VbLet, arg)
EndIf
Exit_Sub:
On error resume next
Exit Sub
Erreur:
TraceError("ERROR", Err, Name, Erl)
Stop
End Sub
LibreOffice Version 7.4.6.2
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
Utilisation sur plusieurs systèmes d'exploitation (nomadisme sous windows et Linux)
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Basic] setPropertyValue pour les pseudos objets ?
Non, je n'ai pas dit ça. La fonction n'est pas documentée et vient de l'univers VBA, mais elle est tout à fait disponible sans faire appel à l'option de compatibilité.gelinp a écrit :[...] je comprends que ce n'est pas vraiment une fonction Ooo mais plutôt une function Visual Basic (Microsoft) utilisable par le biais du module de comaptibilité
Cette erreur n'a rien à voir. Je ne sais pas où tu l'as recopiée, mais elle contient 2 erreurs : le nom exact du service est "com.sun.star.lang.ServiceManager", et la fonction pour l'instancier est "CreateUnoService" :gelinp a écrit :Aussi je n'arrive pas à l'utiliser car mon programme plante sur l'appel de la première ligne de setOOoProp, c'est-à-dire : Set oSM = CreateObject("com.sun.star.ServiceManager")
Code : Tout sélectionner
xray CreateUnoService("com.sun.star.lang.ServiceManager")
Code : Tout sélectionner
dim prop(0) as new com.sun.star.beans.PropertyValue
prop(0).Name = "Title"
prop(0).Value = "TEST"
Les exemples sont innombrables sur le forum.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)