Soyez le premier à donner votre avis sur cette source.
Snippet vu 25 007 fois - Téléchargée 59 fois
//A ne pas oublier dans le code du modèle.dot //Cette macro dans le modèle est indispensable, car pas d'équivalent en .net (c'est ce que j'en ai déduit après de longues recherches infructueuses) Sub propager() WordBasic.MailMergePropagateLabel End Sub //Dans votre code C# object path = "C:\\modèle.dot" object o = Type.Missing; object oTrue = true; object oFalse = false; object field = ""; object index = 0; object type = Word.WdFieldType.wdFieldMergeField; object format = Word.WdOpenFormat.wdOpenFormatAuto; object subType = Word.WdMergeSubType.wdMergeSubTypeOther; try { //On ouvre un nouveau fichier Word d'après le modèle "c:\modèle.dot" wrd.Documents.Add(ref path, ref o, ref o, ref o); for(int i = 1 ; i <= nbLigne ; i++) //nbLigne --> Représente dans mon code le nombre de lignes max qu'il peut y avoir dans le modèle d'étiquette { nbOccur = 0; //Pour chaque ligne de mon étiquette foreach(string champ in publi.récupField(i, nbLigne).Split(new char[]{'#'}, 5)) //récupFiled me récupère tous les champs souhaités pour chaque ligne de l'étiquette (séparés par des #) { if(champ != "") { field = "\"" + champ.Replace(' ', '_').Replace("\'", "") + "\""; //Replace nécessaire car les champs sous Word ne doivent pas avoir d'espace ni d'apostrophe //ni d'autres caractères spéciaux très probablement if(nbOccur != 0) { wrd.Selection.TypeText(" "); //Nécessaire pour espacer les champs sur la même ligne } //On ajoute le champ dans la première étiquette du modèle wrd.ActiveDocument.Fields.Add(wrd.Selection.Range, ref type, ref field, ref o); } nbOccur += 1; } //Après chaque ligne de champs, on passe à la ligne suivante dans le fichier Word wrd.Selection.TypeText("\r"); } string file = dataExtract(); //dataExtract me récupère le nom du fichier temporaire que je créé, il contient les données de mon listview avec en première ligne //les entêtes de colonne (tous les champs sont séparés par un ";") if(file == "error") { MessageBox.Show("Le programme ne peut pas finaliser la publication : problème de droits d'accès.", "Droits d'accès", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { //On lie le fichier source à notre document Word wrd.ActiveDocument.MailMerge.OpenDataSource(file, ref format, ref oFalse, ref oFalse, ref oTrue, ref oFalse, ref o, ref o, ref oFalse, ref o, ref o, ref o, ref o, ref o, ref o, ref subType); //On appelle la macro "propager" inclue dans le fichier Word pour propager la configuration sur tous les étiquettes du fichier wrd.Run("propager", ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o, ref o); //On exécute le publipostage wrd.ActiveDocument.MailMerge.Execute(ref oFalse); wrd.Visible = true; wrd.Activate(); } } catch(Exception ex) { MessageBox.Show("Le programme a rencontré l'erreur suivante :\r\r" + ex.Message); }
14 janv. 2010 à 13:00
svp si qlq peux rependre a ma question
Quel est le type de la variable publi ?
Merci d'avance
23 juin 2007 à 10:38
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.