Problème de style avec automation Word en C#

Utilisateur anonyme - 29 août 2011 à 15:15
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 30 août 2011 à 19:29
Bonjour,
Je dois générer un document Word via C# à partir d'un modèle.
Jusque là tout va bien. Cependant j'ai un soucis avec les styles.

Au début du doc, chaque paragraphe à un style différent, mais le soucis c'est que le texte qui correspond au paragraphe ne prend pas le style que je lui indique, et c'est le titre du document (le tout premier texte que j’insère) qui prend à chaque fois le style du dernier paragraphe généré...

Voici le début de mon code:

            //Charge les configs externes pour le texte
            GlobalSettings globalSettings = new GlobalSettings();

            object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */

            //Démrrage de word et ouverture du model.
            Word._Application oWord;
            Word._Document oDoc;
            oWord = new Word.Application();
            oWord.Visible = true;
            object oTemplate = "RAPPORT INFRASTRUCTURE.dotx";
            object fileName = @"Rapport.docx";
            oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
                ref oMissing, ref oMissing);



            //Titre du doc
            Word.Paragraph oMainTitle;
            object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            object oStyleMainTitle = "MainTitle";
            oWord.Selection.Range.set_Style(ref oStyleMainTitle);
            oMainTitle = oDoc.Content.Paragraphs.Add(ref oRng);
            oMainTitle.Range.Text = globalSettings.MainTitle;
            //oMainTitle.Range.Font.Bold = 11;
            oMainTitle.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oMainTitle.Range.InsertParagraphAfter();

            // saut de page
            object paramNextPage1 = WdBreakType.wdSectionBreakNextPage;
            oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertBreak(ref paramNextPage1);

            //Informations générales
            Word.Paragraph oInfosGen;
            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            oInfosGen = oDoc.Content.Paragraphs.Add(ref oRng);
            object oStyleInfosGen = "InfosGen";
            //oWord.Bookmarks.Item(ref oInfosGen).Range.set_Style(ref oStyleInfosGen);
            //oWord.Selection.set_Style(ref );
            oWord.Selection.Range.set_Style(ref oStyleInfosGen);
            oInfosGen.Range.Text = globalSettings.InfosGen;
            oInfosGen.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oInfosGen.Range.InsertParagraphAfter();

            // saut de page
            object paramNextPage2 = WdBreakType.wdSectionBreakNextPage;
            oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertBreak(ref paramNextPage2);

            //Word.Range rng = oDoc.Paragraphs[1].Range;

            //SommaireTitle
            Word.Paragraph oSommaireTitle;
            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            object oStyleSommaireTitle = "SommaireTitle";
            oWord.Selection.Range.set_Style(ref oStyleInfosGen);
            oSommaireTitle = oDoc.Content.Paragraphs.Add(ref oRng);
            oSommaireTitle.Range.Text = globalSettings.SommaireTitle;
            oSommaireTitle.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oSommaireTitle.Range.InsertParagraphAfter();


Je n'arrive pas à comprendre d'où vient le problème. Quelqu'un à une idée ?

Merci :)

3 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
30 août 2011 à 06:59
Bonjour,

je pende qu'à chaque appel du même bookmark, tu sélectionnes tout le document.

As tu essayé un bookmark "titre" et un "texte"?


Whismeril
0
Utilisateur anonyme
30 août 2011 à 10:35
Hello,

Je débute un peu dans l'automatisation de Word, comment puis je assigner un bookmark à un titre ou un texte spécifique ?

D'ailleurs je ne trouve pas beaucoup de doc approfondie là dessus..

Merci
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
30 août 2011 à 19:29
Bonsoir,

un signet peut être un emplacement de curseur, un mot, un paragraphe, une page voire le document entier.

Dans ton modèle, tu places le curseur ou tu sélectionnes l'endroit qui t'intéresse et tu insères un signet que tu nommes comme tu veux.
Si c'est un emplacement le texte sera inséré à cette endroit, dans le cas contraire le texte remplacera l'existant.

Si tu as un modèle pré-rempli ou tu veux insérer ici ou là une info c'est très pratique.
Dans ce genre de cas, mon signet est mot qui reproduit le mon du signet, ainsi dans mon modèle je vois "Tartempion" là ou se trouve le signet "Tartempion", c'est plus simple je trouve pour préparer son document.


Sur word 2003 Insertion-> Signet, sur 2007/2010 je ne sais plus mais dans la même idée.


Whismeril
0
Rejoignez-nous