8 messages in org.openoffice.fr.progRE: [prog] Publipostage ...
FromSent OnAttachments
Cezame ConceptJul 5, 2006 7:07 am 
Cezame ConceptJul 6, 2006 1:54 am 
Essonne ConsultantsJul 6, 2006 4:53 am 
Cezame ConceptJul 6, 2006 6:43 am 
Essonne ConsultantsJul 6, 2006 7:23 am 
Cezame ConceptJul 6, 2006 7:50 am 
Essonne ConsultantsJul 6, 2006 8:18 am 
Cezame ConceptJul 6, 2006 10:34 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:RE: [prog] Publipostage ...Actions...
From:Cezame Concept (ceza@wanadoo.fr)
Date:Jul 6, 2006 7:50:08 am
List:org.openoffice.fr.prog

En disons que ce que j'ai fais moi c'est un petit projet .NET sous VB Express 2005

Ensuite j'ai juste a ajouter mon projet (DLL .net) dans Windev pour l'utiliser ...

En gros je voudrais juste créer sous VB Express une fonction a laquelle je passe en paramètre le chemin de la base, Le chemin du fichier modèle et le chemin du fichier de sortie.

Ensuite donc sous mon application finale il me suffit de tester quel office le client final utilise et lancer les méthodes correspondantes (soit OpenOffice soit Microsoft Office).

Pensez vous que l'on puisse réaliser cette fonction complète sous VB Express ?

Merci encore pour votre aide ...

-----Message d'origine----- De : Essonne Consultants [mailto:esso@wanadoo.fr] Envoyé : jeudi 6 juillet 2006 16:24 À : pr@fr.openoffice.org Objet : RE: [prog] Publipostage ...

J'ai essayé de transposer ça dans VBA mais le plus simple est de lancer la macro.

L'avantage est que tu deviens indépendant de ton appli (Access ou Windev), il te suffit de lancer la macro et OO s'occupe du reste

-----Message d'origine----- De : Cezame Concept [mailto:ceza@wanadoo.fr] Envoyé : jeudi 6 juillet 2006 15:44 À : pr@fr.openoffice.org Objet : RE: [prog] Publipostage ...

Merci

Je vais essayer de transposer tout ca sous Windev ...

Pourquoi utiliser une macro dans OpenOffice ?

Merci pour votre aide

-----Message d'origine----- De : Essonne Consultants [mailto:esso@wanadoo.fr] Envoyé : jeudi 6 juillet 2006 13:54 À : pr@fr.openoffice.org Objet : RE: [prog] Publipostage ...

Bonjour,

Moi aussi je réalise des fusions avec office, après recherches et aides de certaines personnes, voilà comment je fais avec Open Office.

Le problème que je n'ai pas encore résolu est le fait que si j'ai 5 enregistrements dans mon fichiers de données cela me créé 5 courriers et je préférerais 1 courrier avec 5 pages comme dans Word.

1) Dans mon application Access je lance Open Office et la macro macro_Courpubimp par la commande suivante :

Private Sub Open_Office_Click() On Error GoTo Err_Open_Office_Click

Dim stAppName As String

stAppName = "C:\Program Files\OpenOffice.org 2.0\program\swriter.exe macro:///standard.module1.macro_courpubimp" Call Shell(stAppName, 1)

Exit_Open_Office_Click: Exit Sub

Err_Open_Office_Click: MsgBox Err.Description Resume Exit_Open_Office_Click

End Sub

2) Contenu de la macro macro_courpubimp qui lance la macro publipostage :

Sub macro_courpubimp ' Dimensionnement de la valeur de retour de la fonction PubliPostage, ' pour savoir si la fonction s'est bien passée Dim RetourValeur as long

' Lancement de la procédure de publi-postage : attention au chemin du répertoire des modèles d'Openoffice RetourValeur = Publipostage("D:/Logement/Open Office/", "test", "trt")

If RetourValeur then ' Si problème, on informe l'utilisateur MsgBox("Un problème a eu lieu lors de la fonction PubliPostage. Vérifiez votre impression s'il vous plait.") endif

end sub

3) Contenu de la macro publipostage en vert les commentaires:

Function Publipostage(Chemin as string, ArgNomBase As String, ArgNomTable as String)

on error goto ErreurPubliPostage

' Ouverture du modèle et création d'un nouveau document Dim oDesktop As Object Dim oDocument As Object ' Nouveau document créé à partir du modèle dim tUrl as String ' Contiendra le chemin complet du fichier modèle Dim NoArgs() as New com.sun.star.beans.PropertyValue Dim oDocClose

Dim dispatcher as Object Dim parser as Object Dim disp as Object Dim url as new com.sun.star.util.URL Dim oFrame as Object

' Vérification si Chemin possède un "/" à la fin, si non, on en met un. On enlève les espaces devant/derriere. Chemin=trim(Chemin) If Right(Chemin,1) <>"/" then Chemin=Chemin+"/" endif

' Connexion au service, nécessaire pour le fonctionnement de toutes les propriétés et méthodes oDesktop = createUnoService("com.sun.star.frame.Desktop")

' Connexion à la base de données et récupération des enregistrements. ' Celle-ci doit avoir été renseignée dans le menu Outils/Source de données, avec les noms indiqués ' Dans la ligne de commande lançant la macro ("test", "trt" dans mon exemple). ' Le premier terme désigne la base de données, le deuxième la table dans la base de données. dim oRowSet as object ' Equivalent d'un Dynaset, autrement dit ' une "image" dynamique de la table. dim ChaineSQL as String ' Chaine qui contiendra la requête SQL de chargement du RowSet

' Connexion au service de gestion des base de données oRowSet = createUnoService("com.sun.star.sdbc.RowSet")

' Définition de la base de données à atteindre oRowSet.SetPropertyValue("DataSourceName",ArgNomBase)

' Chargement de la chaîne contenant la requête SQL ChaineSQL = "select * from " + ArgNomTable

' Affectation de la requête SQL oRowSet.SetPropertyValue("Command",ChaineSQL)

' Exécution de la requête SQL oRowSet.execute

'Récupération du nom des colonnes dim mData as object ' Contiendra les données du RowSet

dim n as integer

dim NbColonnes as integer ' Le nombre de colonnes du RowSet

mData = oRowSet.getMetaData() NbColonnes= mData.ColumnCount

dim NomColonnes(NbColonnes) As String ' Dimensionnement du tableau des noms de colonnes

if oRowSet.RowCount > 0 then ' S'il existe des lignes dans la table... oRowSet.next() for n=0 to NbColonnes - 1 NomColonnes(n) = mData.getColumnName(n+1) ' On charge le nom des colonnes (1ere ligne) next n endif

'Remplissage des champs Dim oChamps, tfm, InpFieldEnum, InpField As Object dim NomColonneChamps as String

do while not oRowset.isAfterLast ' Teste si Fin de fichier (EOF)

' Ouverture du document de la ligne d'enregistrement for n=0 to NbColonnes-1 if NomColonnes(n)="TYPCOUR" then ' Nom de la colonne dans mon fichier de données contenant le nom du fichier modèle ' Chargement de l'Url menant au fichier modèle, il faudrait modifier le chemin absolu, ' Pour le placer en variale de ligne de commande par exemple tUrl="file:///" + Chemin + oRowSet.getString(n+1) +".ott" endif next n

' Chargement du document oDocument = oDesktop.LoadComponentFromURL(tUrl,"_blank",0,NoArgs())

' Important : on charge dans oChamps tous les champs du modèle, ' Comprendre les champs qui peuvent être modifiés dans le document modèle. oChamps = oDocument.getTextFields

' Création d'une énumération des champs texte du modèle InpFieldEnum = oChamps.createEnumeration()

do while InpFieldEnum.hasMoreElements ' Tant qu'il reste des champs texte pas énumérés InpField = InpFieldEnum.nextElement() if InpField.supportsService("com.sun.star.text.TextField.Database") then tfm = InpField.getTextFieldMaster()

' Chargement du nom du champ texte dans le modèle, pour vérification ensuite avec le nom des colonnes dans la base de données NomColonneChamps = InpField.getTextFieldMaster.getPropertyValue("DataColumnName") for n=0 to NbColonnes-1 ' De la première à la dernière colonne de la base données... if NomColonneChamps = NomColonnes(n) then ' Le nom de la colonne est-il le nom du champ texte ? InpField.Content = oRowSet.getString(n+1) ' Si oui, la valeur du champ est chargée depuis la BDD exit for ' et on sort de la boucle endif next n endif loop

oChamps.Refresh ' Rafraichir tous les champs du document modèle

' oDocument.print(NoArgs()) ' Enlever le ' au début de la ligne si tu veux imprimer directement ' oDocClose=StarDesktop.ActiveFrame.Dispose ' Enlever le ' au début de la ligne si tu veux fermer le document

oRowset.next ' On passe à la ligne suivante loop ' Retour case départ wait 2000 ' Bon, là c'est pas très propre ! J'aurai préféré avoir une ' routine qui attends que l'impression soit terminée. PubliPostage=0

Goto FinPubliPostage

ErreurPubliPostage: PubliPostage = ERR MsgBox ("Erreur" & ERR & "." & chr$(13) & ERROR$)

FinPubliPostage: End Function

4) Voici le contenu de mon fichier de données (Dans le champ TYPCOUR est le nom de mon modèle : Relance):

"TYPCOUR";"Ins_Département";"Ins_Ville";"Ins_Mois";"Ins_Numéro";"Ins_Date";" DateEchéance";"Nom_et_prénom";"Civilité_Demandeur";"Délai_attente";"Ins_Date _Initiale";"Ancienneté_Ville";"Adresse_Demandeur" Relance;91;258;504;634;03/05/2004;03/05/2005;"DURAND Marcel";"Monsieur";"25 mois";03/05/2004;"01/09/2000";"34 ter, allée Jean Rostand" Relance;91;258;504;637;03/05/2004;03/05/2005;"AKANE Vichy";"Mademoiselle";"25 mois";03/05/2004;"01/01/1985";"2, rue de l'Orge" Relance;91;258;504;638;03/05/2004;03/05/2005;"BENAHMED Youcef";"Monsieur";"25 mois";03/05/2004;"01/08/1981";"201, rue Rothenberg"

Je recréé ce fichier par un export avant de lancer ma fusion

5) Déclarer dans OO fichier, nouveau, base de données le fichier de données (base test, table trt dans mon exemple)

En espérant que cela te soit utile, n'hésite pas à me demander des explications si cela n'est pas clair

Je dois basculer une appli d'Access vers Windev 10 donc tes recherches pourrait m'intéresser.

Bon courage,

-----Message d'origine----- De : Cezame Concept [mailto:ceza@wanadoo.fr] Envoyé : jeudi 6 juillet 2006 10:55 À : pr@fr.openoffice.org Objet : [prog] Publipostage ...

Bonjour,

Après plusieurs recherches j’ai trouvé une base de travail pour réaliser un publipostage avec oOWriter..

Je réalise aujourd’hui un publipostage avec Microsoft Office dans une application

Je souhaiterais juste transposer en fait ce que je fais sous Microsoft Office sous OpenOffice

Aujourd’hui je réalise ceci sous Microsoft Office :

PROCEDURE PubliPostage(ModèleAUtiliser, SourceDonnées, DocumentFinal)

MonDocWord est un objet OLE dynamique

MonDocWord = allouer un objet OLE "Word.Application"

//Document Visible MonDocWord>>visible=Faux //Ouverture du modèle MonDocWord>>Documents>>Open(ModèleAUtiliser) //Lancement du publipostage MonDocWord>>Activedocument>>Mailmerge>>OpenDataSource(SourceDonnées)

MonDocWord>>ActiveDocument>>MailMerge>>Execute(Faux) Multitâche(-30)

MonDocWord>>ActiveDocument>>SaveAs(DocumentFinal,0) //Ferme le document fusionné MonDocWord>>ActiveDocument>>Close(Faux) Multitâche(-30) //Ferme le document principal MonDocWord>>ActiveDocument>>Close(Faux)

Ceci étant réalisé sous Windev environnement

Ceci est t’il transposable sous OpenOffice ?

L’appli doit également permettre d’utiliser sur des poste Microsoft Office et OpenOffice en même temps. Donc utiliser des fichiers .doc et .xls ceci gène t’il les fonctions de publipostage sous OpenOffice ?

Merci d’avance pour vos lumières