2017-04-06 2 views
0

J'utilise ce code pour créer un fichier Word par programme en utilisant Microsoft.interop.word C#, quand je le crée, j'ai un problème qui est de répéter l'en-tête de la première page à toutes les pages des documents, comment je peux le mettre pour mettre l'en-tête pour la première page du document seulement?Créer un fichier Word à l'aide de Microsoft.office.Interop.Word

et c'est mon code:

public void create_Document() 
    { 
     try 
     { 
      //Create an instance for word app 
      Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application(); 

      //Set animation status for word application 
      winword.ShowAnimation = false; 

      //Set status for word application is to be visible or not. 
      winword.Visible = false; 

      //Create a missing variable for missing value 
      object missing = System.Reflection.Missing.Value; 

      //Create a new document 
      Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing); 

      //Add header into the document 
      foreach (Microsoft.Office.Interop.Word.Section section in document.Sections) 
      { 
       //Get the header range and add the header details. 
       Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 
       headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage); 
       headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; 
       headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue; 
       headerRange.Font.Size = 30; 
       headerRange.Text = "Exam Dates for the " + course_name; 
       section.Borders.Enable = 1; 
       section.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle; 
       section.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth300pt; 
       section.Borders.OutsideColor = WdColor.wdColorBlack; 

      } 



      //adding text to document 
      document.Content.SetRange(0, 0); 
      // document.Content.Text = "Exam Dates :" + Environment.NewLine; 

      //Add paragraph with Heading 1 style 
      Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing); 
      object styleHeading1 = "Heading 1"; 
      para1.Range.set_Style(ref styleHeading1); 
      para1.Range.Text = "Exam Dates"; 
      para1.Range.InsertParagraphAfter(); 



      //Create a 5X5 table and insert some dummy record 
      // Microsoft.Office.Interop.Word.Table firstTable = document.Tables.Add(para1.Range, 4,2, ref missing, ref missing); 
      Microsoft.Office.Interop.Word.Table firstTable = document.Tables.Add(para1.Range, 1, 2, ref missing, ref missing); 

      firstTable.Borders.Enable = 1; 

      firstTable.Cell(1, 1).Range.Text = "Exam Name"; 
      firstTable.Cell(1, 2).Range.Text = "Exam Date"; 
      connection.Close(); 
      connection.Open(); 
      SqlCommand cmd = new SqlCommand("select ExamName,Date from Exam where CourseNum='" + course_number + "'", connection); 
      SqlDataReader reader = cmd.ExecuteReader(); 

      int intRow = 2; 

      // Retrieve the data and insert into new rows. 
      Object beforeRow = Type.Missing; 
      string[] dates; 
      while (reader.Read()) 
      { 
       dates = reader[1].ToString().Split(' '); 
       firstTable.Rows.Add(ref beforeRow); 
       firstTable.Cell(intRow, 1).Range.Text = reader[0].ToString(); 
       firstTable.Cell(intRow, 2).Range.Text = dates[0]; 

       intRow += 1; 
      } 
      //Save the document 
      object filename = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\Attachments\\Exams.docx"; 
      document.SaveAs2(ref filename); 

      // document.Save(); 
      ((Microsoft.Office.Interop.Word._Document)document).Close(ref missing, ref missing, ref missing); 
      ((Microsoft.Office.Interop.Word._Application)winword).Quit(ref missing, ref missing, ref missing); 
} 
     catch (Exception ex) 
     { 
      ex.ToString(); 
     } 


     }//create document 

Répondre

0

Je crois que vous êtes à la recherche de l'autre wdHeaderFooterIndex propriété wdHeaderFooterFirstPage est celui que vous recherchez. Merci à la réponse @ Arun au Different First Page in a document using microsoft office interop word in c# ... Vous verrez que vous devez également définir la valeur des documents PageSetup.DifferentFirstPageHeaderFooter à -1.

Ajoutez simplement la première ligne ci-dessous au code et modifiez la deuxième ligne dans le code pour obtenir la plage d'en-tête pour la première page seulement.

document.PageSetup.DifferentFirstPageHeaderFooter = -1; // <-- add this line 
Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range; 
//Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 

Ceci devrait obtenir que l'en-tête n'apparaisse que sur la première page de chaque section. J'espère que cela t'aides.

+0

oui, ça m'aide, merci beaucoup. –