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?
Mit dem Code
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:
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
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
- Imports Microsoft.Office.Interop.Word
- Imports Word = Microsoft.Office.Interop.Word
- Module Inhaltsverzeichnis
- Dim objWord As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application
- Dim objDoc As Microsoft.Office.Interop.Word.Document = New Microsoft.Office.Interop.Word.Document
- Sub Main()
- 'Paragraph1
- Dim Headline As String = "Heading 1"
- Dim Para1 As Paragraph
- Para1 = objDoc.Content.Paragraphs.Add
- Para1.Range.Text = Headline
- Para1.Range.ID = 1
- Para1.Range.Font.Bold = True
- Para1.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
- Para1.Range.InsertParagraphAfter()
- 'Paragraph1 - Norm Text
- Dim Para2 As Paragraph
- Para2 = objDoc.Content.Paragraphs.Add(objDoc.Bookmarks("\endofdoc").Range)
- Para2.Range.Text = "This is a sentence of normal text. "
- Para2.Range.Font.Bold = False
- Para2.Format.SpaceAfter = 24
- Para2.Range.InsertParagraphAfter()
- 'Paragraph2
- Dim Headline2 As String = "Heading 2"
- Dim Para3 As Paragraph
- Para3 = objDoc.Content.Paragraphs.Add
- Para3.Range.Text = Headline2
- Para3.Range.ID = 1
- Para3.Range.Font.Bold = True
- Para3.Format.SpaceAfter = 24 '24 pt spacing after paragraph.
- Para3.Range.InsertParagraphAfter()
- ' Überschrift TOC
- Dim myRange2 As Range = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
- Dim IHV As String = "Inhaltsverzeichnis"
- myRange2.Text = IHV
- ' TOC einfügen
- Dim myRangeTOC = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
- objDoc.TablesOfContents.Add(Range:=myRangeTOC, UseFields:=False, UseHeadingStyles:=True, LowerHeadingLevel:=3, UpperHeadingLevel:=1)
- ' TOC Eintrag (Funktioniert nicht)
- Dim myRangeTOC2 = objDoc.Range(objDoc.Range.End - 1, objDoc.Range.End)
- objDoc.TablesOfContents.MarkEntry(Range:=myRangeTOC2, Level:=1, Entry:=Para1.ID = 1)
- ' TOC aktualisieren
- objDoc.TablesOfContents(1).Update()
- ' Save and clear
- objDoc.SaveAs("C:\Users\xyz\word.doc")
- objDoc.Close()
- objWord.Quit()
- End Sub
- 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“ ()