Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

automation open office

5 réponses
Avatar
Jacques TREPP
Bonjour,
je suis en train de tester les classes open office.
c'est encourageant, pour ce que je voudrais en faire.
Je bute sur une traduction de macro. Je me suis inspiré de la méthode
Imprime pour créer une autre
méthode qui s'appellerait Change_Printer
voici le code la méthode Imprimer :
PROCEDURE Imprimer(nNbCopies=1,sListePage est une chaîne = "")

// Paramétrage de l'impression
ParamImpression est un tableau de 1 objet Automation dynamique

// Nombre de copies du document
ParamImpression[1] =
:oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
ParamImpression[1]>>Name = "CopyCount"
ParamImpression[1]>>Value = nNbCopies

// Pages imprimées
SI sListePage<>"" ALORS
TableauAjoute(ParamImpression)
ParamImpression[2] =
:oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
ParamImpression[2]>>Name = "Pages"
ParamImpression[2]>>Value = sListePage
FIN

// Impression effective
:oDocument>>print(ParamImpression)


Voici ce que je voudrais : changer l'imprimante pour le document en cours:

PROCEDURE Changer_imprimante("PDFCreator")

Document est un objet OLE dynamique
tArguments est un tableau de 1 objet OLE dynamique
dispatcher est un objet OLE dynamique

dispatcher =
:oServiceManager>>createInstance("com.sun.star.frame.DispatchHelper")
tArguments[1]>>Name = "Printer"
tArguments[1]>>Value = ("PDFCreator"
dispatcher>>executeDispatch(Document,".uno:Printer", "",0,tArguments)

Evidemment, ça plante, mais je suis très nul en traduction VB > Windev.

Si vous êtes inspirés ..., vous serez les bienvenus.

merci d'avance



--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)

5 réponses

Avatar
Jacques TREPP
Pour info, voici la macro open office, et ma traduction.
MACRO :
REM ***** BASIC *****

Sub Main

End Sub


sub test
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Printer"
args1(0).Value = "PDFCreator"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Copies"
args2(0).Value = 1
args2(1).Name = "Collate"
args2(1).Value = false

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())


end sub

TRADUCTION :
PROCEDURE Changer_imprimante(NomPrinter)

Document est un objet OLE dynamique
tArguments est un tableau de 1 objet OLE dynamique
dispatcher est un objet OLE dynamique

dispatcher :oServiceManager>>createInstance("com.sun.star.frame.DispatchHelper")

tArguments[1] :oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")
tArguments[1]>>Name = "Printer"
tArguments[1]>>Value = NomPrinter
dispatcher>>executeDispatch(Document,".uno:Printer", "",0,tArguments)

ça ne plante plus, mais ça ne fait rien ! :)





--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Avatar
Romain PETIT
Jacques TREPP a émis l'idée suivante :

ça ne plante plus, mais ça ne fait rien ! :)



Le dispatcher>>executeDispatch, ce n'est pas sur tArguments mais sur un
second tableau, non ?

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Romain PETIT vient de nous annoncer :
Jacques TREPP a émis l'idée suivante :
ça ne plante plus, mais ça ne fait rien ! :)


Le dispatcher>>executeDispatch, ce n'est pas sur tArguments mais sur un
second tableau, non ?



Il faut appeler 2 fois la fonction avec 2 tableaux d'arguments
différents, je pense (le 2ème tableau donne par exemple le nombre de
copies)

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Dans son message précédent, Jacques TREPP a écrit :
(je remets dans le bon fil...)
cf : <46f386a7$0$10641$
Merci, Romain,

je suis un peu dégouté de ces traductions. Ne parlons pas de l'import de
windev (10). si je crée un fichier VBP, il ne fait aucun traitement. Si c'est
un BAS, il me propose d'intégrer le code, mais ne fait ... rien ! :)

Je te donne pour exemple le code d'une macro qui imprime le document courant,
et la traduction faite dans la classe windev, et qui fonctionne :


[...]
c'est bien dommage car l'utilisation d'OpenOffice me parait de plus en plus
incontournable.



Donc si je comprend bien ça marche après avoir modifié la traduction
automatique ?
Tu trouves étonnant que ces bidules d'importation ne marchent pas tout
seuls :-)

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Jacques TREPP
ça y est : je l'ai eu !
MACRO :
sub change_printer
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Printer"
args1(0).Value = "PDFCreator"
dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args1())
end sub
TRADUCTION QUI MARCHE (je me la pète, là)
PROCEDURE Changer_imprimante(NomPrinter)

Document est un objet OLE dynamique

dispatcher est un objet OLE dynamique

ParamImpression est un tableau de 1 objet Automation dynamique

dispatcher =
:oServiceManager>>createInstance("com.sun.star.frame.DispatchHelper")

Document = :oDocument>>CurrentController>>Frame


// Nombre de copies du document
ParamImpression[1] =
:oServiceManager>>Bridge_GetStruct("com.sun.star.beans.PropertyValue")

ParamImpression[1]>>Name = "Printer"
ParamImpression[1]>>Value = NomPrinter

dispatcher>>executeDispatch(Document,".uno:Printer", "",0,ParamImpression)


Merci pour ton aide

--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)