|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
MailMerge WinWord/OpenOffice |
Débuté par marc.codron, 04 nov. 2005 12:43 - 4 réponses |
| |
| | | |
|
| |
Posté le 04 novembre 2005 - 12:43 |
Bonjour,
Existe t il une équivalence sur le dialogue OLE de WinWord dans OpenOffice (V2) en ce qui concerne la FusionPublipostage.
//----- Instruction MailMerge d’une source de données texte par exemple //----- vers un nouveau document depuis un modèle. w_word_mail>>ActiveDocument>>MailMerge>>Destination = 0 w_word_mail>>ActiveDocument>>MailMerge>>Execute(OLEFaux)
j’ai cherché du côté de l’Assistant Mailing d’OpenOffice et des macros mais sans succès.
Objet.executeDispatch(document, ".uno:MailMergeWizard", "", 0, Array()) |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 17:40 |
Marc a écrit :
Bonjour,
Existe t il une équivalence sur le dialogue OLE de WinWord dans OpenOffice (V2) en ce qui concerne la FusionPublipostage.
//----- Instruction MailMerge d’une source de données texte par exemple //----- vers un nouveau document depuis un modèle. w_word_mail>>ActiveDocument>>MailMerge>>Destination = 0 w_word_mail>>ActiveDocument>>MailMerge>>Execute(OLEFaux)
j’ai cherché du côté de l’Assistant Mailing d’OpenOffice et des macros mais sans succès.
Objet.executeDispatch(document, ".uno:MailMergeWizard", "", 0, Array())
Ca existe !! J'avais posté du code OLE qui permetait : - de créer ou d'ouvrir un document. - de créer une source de donnée. - d'associer les 2 - de lancer le publipostage
Le seul point qui pose problème est l'ajout programmé de champ de liaison dans le document (les zones remplacés) J'ai plus ou moins délaissé mon code depuis mes derniers essais. Donc je ne sait pas si mon code est compatible OOo 2.0 ou si quelqu'un a trouvé une solution a l'ajout de champs de fusion.
a++ Goof
PS : ecrit moi si tu ne retrouve pas le post, je peut te redonner mes quelques lignes de code. PS2 : si tu trouve une solution ca m'interesse aussi. |
| |
| |
| | | |
|
| | |
| |
Posté le 07 novembre 2005 - 10:06 |
Avez vous solutionné l'utilisation de la commande PropertyValue . ??
Pour par exemple ouvrir un document en mode invisible ou en lecture seule ....
J'ai essayé d'utiliser des tableux de variants des tableuax d'objets ole dynamique .. impossible de faire fonctionner la commande !
Merci d'avance ...
le code de publipostage m'interesses aussi ... je suis entrain de créer une classe complète pour l'utilisation de Lole avec Writer et Calc ... je pourrais la mettre a votre disposition ensuite ... |
| |
| |
| | | |
|
| | |
| |
Posté le 07 novembre 2005 - 17:19 |
Ok Goof, je veux bien tes lignes de code afin que je puisse les tester en V2 et connaitre ta syntaxe sur le lancement de la fusion. En effet en version 2, la fusion à bien évoluée. La fusion est visuelle et le résultat est dans un seul et un même document (idem Winword). Merci par avance, je continu mes tests et vous tiens informés si je trouve des solutions.
@+ |
| |
| |
| | | |
|
| | |
| |
Posté le 08 novembre 2005 - 10:33 |
Marc a écrit :
Ok Goof, je veux bien tes lignes de code afin que je puisse les tester en V2 et connaitre ta syntaxe sur le lancement de la fusion. En effet en version 2, la fusion à bien évoluée. La fusion est visuelle et le résultat est dans un seul et un même document (idem Winword). Merci par avance, je continu mes tests et vous tiens informés si je trouve des solutions.
@+
Voila le code. on doit générer un fichier texte csv compatible avec le moteur de donnée de OOo.
----------Initialisation de ma fenêtre-------------- Document_OOo est un Automation dynamique Appli_OOo est un Automation dynamique Traitement_de_texte_OOo est un Automation dynamique FenEtat(PUBLI_OOo,DessusTout) QUAND EXCEPTION Info("Erreur dans le publipostage.") Ferme FIN ----------------------------------------------------
S_Fichier est un champ contenant le nom d'un document a ouvrir. Si ce champ est vide on crée un nouveau document. --------------- Bouton lancer OOo ------------------ t_Var_1 is array of 0 Variants appli_OoO=GetActiveObject("com.sun.star.ServiceManager") // recuperation d'une instance en cours de openoffice IF Appli_OOo=Null THEN Appli_OOo = new object Automation "com.sun.star.ServiceManager" IF Appli_OOo=Null THEN Info("OpenOffice.org n'est pas démarré ou installé.") RETURN END END Traitement_de_texte_OOo = Appli_OOo>>createInstance("com.sun.star.frame.Desktop") IF Traitement_de_texte_OOo=Null THEN Info("Impossible de démarrer OpenOffice.org") RETURN END IF S_Fichier<>"" THEN // ouverture d'un fichier existant Document_OOo = Traitement_de_texte_OOo>>loadComponentFromURL("file:///"+Replace(S_Fichier,"\","/"), "_blank", 0,t_Var_1) IF Document_OOo=Null THEN Info("Impossible d'ouvrir le document.") ELSE // création d'un nouveau document. Document_OOo = Traitement_de_texte_OOo>>loadComponentFromURL("private:factory/swriter", "_blank", 0,t_Var_1); IF Document_OOo=Null THEN Info("Impossible de créer un nouveau document") END -----------------------------------------------------
ce bouton permet d'insérer du texte. Mais OOo ne gére pas ses champs comme du texte, a l'inverse de MS Word. Liste1 contient des nom 'Humanoide' de champs avec un glien vers le nom 'Informatique' du champ dans le fichier de donnée ------------------ bouton insérer ------------------- objText est Automation dynamique SI Document_OOo=Null ALORS Info("Aucun document n'est ouvert") RETOUR FIN objText = Document_OOo>>Text() objText>>insertString(Document_OOo>>CurrentController>>ViewCursor, " <"+Liste1[Liste1]..Valeur+"> ", OLEFaux) ------------------------------------------------------
------------- Bouton Lancer le publipostage ---------- b_temp est booléen Sdb_Access est Automation dynamique OOo_db est Automation dynamique S_fichier_temp est chaîne Temp est tableau de 0 Variant Mail_Merge est Automation dynamique
// on verifie que le document est ouvert. SI Document_OOo=Null ALORS Info("Impossible de créer un nouveau document") RETOUR FIN
// Création de la source de donnée si elle n'existe pas Sdb_Access = Appli_OOo>>createInstance("com.sun.star.sdb.DatabaseContext") b_temp=Sdb_Access>>hasByName("EDTPERSO") SI b_temp = Faux ALORS OOo_db = Sdb_Access>>createInstance() // ici on met le nom du fichier texte contenant les données OOo_db>>setPropertyValue("URL", "sdbc:flat:file:///C:/data.txt") // Il y a peut-être d'autres paramètres a renseigner. // mais je n'ai pas pu tester. // enregistrement de la source de donnée. (ca marche) Sdb_Access>>registerObject("EDTPERSO", OOo_db); FIN
// on enregistre dans un fichier temporaire pour effectuer la fusion. // (extension a verifier pour OOo 2) S_fichier_temp="file:///"+Remplace(fRépertoireTemp()+"edtperso\"+fExtraitChemin(fFichierTemp(),fFichier)+".sxw","\","/") Document_OOo>>storeToURL(S_fichier_temp,Temp) // on instancie le mail merger et on le paramètre. Mail_Merge = Appli_OOo>>createInstance( "com.sun.star.text.MailMerge" ) Mail_Merge>>DataSourceName="EDTPERSO" Mail_Merge>>DocumentURL=S_fichier_temp Mail_Merge>>CommandType=0 //' Find the fields in a db table Mail_Merge>>Command="FUSION" Mail_Merge>>OutputType=1 // on lance la fusion Mail_Merge>>Exécute(Temp) Info("Fusion terminée") --------------------------------------------------------- |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|