TOC - TableOfContents

  • Word

    TOC - TableOfContents

    Hallo zusammen, (Keine Ahnung ob das hier rein gehört)

    bin seit einer Weile an einer Aufgabe mit VB Word zu automatisieren. Darin habe ich leider keine Erfahrung. Mr Google hilft bei einigen Dingen, aber in Sachen Inhaltsverzeichnis finde ich wenig und das was ich finde funktioniert bei mir nicht.

    MeinVorhaben:
    Ich habe drei Klassen, eine Main, eine mit dem "Grundaufbau" des Dokumentes (inklusive Inhaltsverzeichnis) und eine mit "Kapiteln" (in der ich die Überschrift für das Inhaltsverzeichnis markieren wollte/sollte).

    Was ich bisher fand (MS, Foren) :

    Hiermit gelingt es mir ein Inhaltsverzeichnis im Dokument anzulege, dies mache ich in der Klasse "Grundaufbau". Im Dokument erscheint dann natürlich "Es wurden keine Einträge für das Inhaltsverzeichnis gefunden.", was ja normal ist. Nur wie bekomme ich jetzt eine Überschrift markiert, damit diese in der Tabelle erscheint?
    • Dim objWord As Word.Application
    • Dim objDoc As Word.Document
    • ...
    • Dim rng As Word.Range = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
    • objDoc.TablesOfContents.Add(Range:=rng1, TableID:=1, UseFields:=False, UseHeadingStyles:=True, LowerHeadingLevel:=3, UpperHeadingLevel:=1, AddedStyles:=style)

    Mit dem Code
    • Dim rng2 As Word.Range = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
    • objDoc.TablesOfContents.MarkEntry(Range:=rng2, TableID:=1, Level:=1, Entry:="Irgendwas")
    • objDoc.TablesOfContents(1).Update()
    • objDoc.TablesOfContents(1).UpdatePageNumbers()

    sollte die Markierung und Aktualisierung der Verzeichnisses statt finden. Range ist so gewählt weil ich das Dokument nacheinander befülle. Hoffe ihr könnt mir dennoch weiter helfen. Ggf. mit einem kleinen Beispiel, das ein Verzeichnis anlegt und eine Überschrift, die markiert wird.

    Hier der genauere Code:

    Visual Basic-Quellcode

    1. Imports Microsoft.Office.Interop.Word
    2. Imports Word = Microsoft.Office.Interop.Word
    3. Module Inhaltsverzeichnis
    4. Dim objWord As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application
    5. Dim objDoc As Microsoft.Office.Interop.Word.Document = New Microsoft.Office.Interop.Word.Document
    6. Sub Main()
    7. 'Paragraph1
    8. Dim Headline As String = "Heading 1"
    9. Dim Para1 As Paragraph
    10. Para1 = objDoc.Content.Paragraphs.Add
    11. Para1.Range.Text = Headline
    12. Para1.Range.ID = 1
    13. Para1.Range.Font.Bold = True
    14. Para1.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
    15. Para1.Range.InsertParagraphAfter()
    16. 'Paragraph1 - Norm Text
    17. Dim Para2 As Paragraph
    18. Para2 = objDoc.Content.Paragraphs.Add(objDoc.Bookmarks("\endofdoc").Range)
    19. Para2.Range.Text = "This is a sentence of normal text. "
    20. Para2.Range.Font.Bold = False
    21. Para2.Format.SpaceAfter = 24
    22. Para2.Range.InsertParagraphAfter()
    23. 'Paragraph2
    24. Dim Headline2 As String = "Heading 2"
    25. Dim Para3 As Paragraph
    26. Para3 = objDoc.Content.Paragraphs.Add
    27. Para3.Range.Text = Headline2
    28. Para3.Range.ID = 1
    29. Para3.Range.Font.Bold = True
    30. Para3.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
    31. Para3.Range.InsertParagraphAfter()
    32. ' Überschrift TOC
    33. Dim myRange2 As Range = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
    34. Dim IHV As String = "Inhaltsverzeichnis"
    35. myRange2.Text = IHV
    36. ' TOC einfügen
    37. Dim myRangeTOC = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
    38. objDoc.TablesOfContents.Add(Range:=myRangeTOC, UseFields:=False, UseHeadingStyles:=True, LowerHeadingLevel:=3, UpperHeadingLevel:=1)
    39. ' TOC Eintrag (Funktioniert nicht)
    40. Dim myRangeTOC2 = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
    41. objDoc.TablesOfContents.MarkEntry(Range:=myRangeTOC2, Level:=1, Entry:=Para1.ID = 1)
    42. ' TOC aktualisieren
    43. objDoc.TablesOfContents(1).Update()
    44. ' Save and clear
    45. objDoc.SaveAs("C:\Users\xyz\word.doc")
    46. objDoc.Close()
    47. objWord.Quit()
    48. End Sub
    49. End Module


    Ergebnis in Word:
    Heading 1
    This is a sentence of normal text.
    Heading 2

    Inhaltsverzeichnis
    Es wurden keine Einträge für das Inhaltsverzeichnis gefunden.


    Leider keine Aktualisierung

    Vielen Dank im voraus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „newVBuser“ ()

  • 1 Benutzer hat hier geschrieben