2016-04-13 21 views
0

Ich Exportieren von Daten aus einer Datenbank in ein Word-Dokument in WinForms C#Dokument Abschnitte

Das resultierende Dokument hat 5 Abschnitte aufgrund Verwendung mit:

Range.InsertBreak(WdBreakType.wdSectionBreakNextPage); 

Was ich möchte wissen, ist, wie zu tun i beziehen sich individuell auf jeden Abschnitt - so dass ich einen anderen Header für jeden Abschnitt gesetzt, anstatt dies zu tun:

foreach (Section section in aDoc.Sections) 
      { 
       //Get the header range and add the header details. 
       var headerRange = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 
       headerRange.Fields.Add(headerRange, WdFieldType.wdFieldPage); 
       headerRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; 
       headerRange.Font.ColorIndex = WdColorIndex.wdBlack; 
       headerRange.Font.Size = 14; 
       headerRange.Font.Name = "Arial"; 
       headerRange.Font.Bold = 1; 
       headerRange.Text = Some Header Here; 
       headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; 
      } 

Da diese alle Header „Einige Kopf hier“ setzt

Antwort

1

standardmäßig schreiben, wenn neue Abschnitte in einem Word-Dokument generiert werden, die Eigenschaft LinkToPrevious auf True gesetzt ist. Dies bedeutet, dass der neue Abschnitt die Kopf- und Fußzeilen des vorherigen Abschnitts "erbt".

Um einen unterschiedlichen Kopf-/Fußzeileninhalt in jedem Abschnitt zu haben, muss LinkToPrevious auf False gesetzt werden. Dies kann erfolgen, während Sie die Abschnitte erstellen, oder jederzeit danach, aber es sollte vor Sie Inhalt in eine Kopfzeile/Fußzeile geschrieben werden. Wenn die Verbindung unterbrochen ist nach die Kopf-/Fußzeile Inhalt enthält, wird dieser Inhalt verloren gehen (aber bleibt in der "übergeordneten" Kopfzeile/Fußzeile, mit der der Abschnitt verknüpft war).

So einen individuellen Abschnitt, entfernen Sie den Link, und schreiben Sie die Inhalte an ihrem Kopf Adresse können Sie:

Word.Section sec = doc.Sections[indexValue] 
Word.HeaderFooter hf = sec.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary]; 
hf.LinkToPrevious = false; 
hf.Range.Text = "Content for this header"; 

Hinweis: Es gibt keine Notwendigkeit, die Abschnitte zu einer List, um sie anders zu geben, zu schreiben Inhalt.

+0

Vielen Dank für Ihre Antwort, ich werde dies morgen versuchen, wenn ich an einem PC bin :) – Krono

0

Da die Eigenschaft Sections nur ein nicht typisiertes IEnumerable ist, können Sie Folgendes tun, um eine typisierte Liste von Abschnitten daraus zu erstellen. Beachten Sie, dass Sie 10 und System.Collections.Generic Namespaces importieren müssen, damit dies funktioniert.

List<Section> sections = new List<Section>(aDoc.Sections.Cast<Sections>()); 

Nun, wenn Sie bestimmten Abschnitt Header müssen festlegen, können Sie

Section section1 = sections[0]; 
var section1HeaderRange = section1.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 
section1HeaderRange.Text = "Section 1 Header"; 

Section section2 = sections[1]; 
var section2HeaderRange = section2.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; 
section2HeaderRange.Text = "Section 2 Header"; 
+0

danke für Ihre Antwort! - Ich kann es jetzt nicht versuchen, da ich nicht an einem PC bin, und werde es nicht für ein paar Tage sein. Wird aktualisiert, wenn ich es tue :) – Krono