ahstax
Goto Top

Vb.net: Word-Doc seitenweise durchsuchen nach Textmarke

Hallo,

ich möchte ein Word-Dokument nach einer Textmarke durchsuchen, um die Seitennummer derjenigen Seite zu erfahren, auf dem die Textmarke ist. Google brachte mich zu der (hoffenltich richtigen Erkenntnis, dass Word in Kombination mit vb keinen direkten Rückschluss von einer Textmarke auf deren Position auf Seite X (X ist gefragt) zulässt.

Daher möchte ich jetzt ein Word-Dokument mit Hilfe einer Schleife und eines Zählers seitenweise auf die Existenz der Textmarke durchsuchen.

Zwei Fragen habe ich:
1. Wo finde ich eine vernünftige Anleitung zum Arbeiten mit vb.net und Word?

2. Was muss ich wie an dem folgenden Codeschnipsel ändern, um mein Ziel zu erreichen?
(ich weiß, dass ich "Microsoft.Office.Interop.Word" usw. durch "Import Microsoft.Office.Interop.Word" ersetzen kann. Aktuell hilft mir das beim Verständnisversuch...)

Dim wordApplication As New Microsoft.Office.Interop.Word.Application
Dim wordDocument As Microsoft.Office.Interop.Word.Document = Nothing
Dim strFileName as String = "C:\blabla\document.doc"       'oder "C:\blabla\document.docx"  
Dim intAnzahlSeiten As Integer
Dim intCounter As Integer

wordDocument = wordApplication.Documents.Open(filename)
intAnzahlSeiten = wordDocument.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages)

For intCounter = 1 To intAnzahlSeiten

...gehe zu Seite intCounter
...prüfe, ob auf Seite intCounter Textmarke "Kind02" existiert:  
   If wordDocument.Bookmarks.Exists("Kind02") Then  
      Dim TextMarkenInhalt As String = wordDocument.Bookmarks().Item("Kind02").Range.Text  
      Exit For
   End If

Next

Neugierige Grüße,
Andreas

Content-ID: 332058

Url: https://administrator.de/contentid/332058

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

132692
Lösung 132692 14.03.2017 aktualisiert um 09:43:20 Uhr
Goto Top
With wordDocument.Bookmarks
    If .Exists("Kind02") Then  
         msgbox("Position: " & .Item("Kind02").Range.Information(3))  
    else
        msgbox("Marke wurde nicht gefunden!")  
    End if
End with
P.
ahstax
ahstax 14.03.2017 aktualisiert um 09:55:57 Uhr
Goto Top
So einfach...?
So einfach.

Danke vielmals!!


PS: Das Seitenweise durchsuchen würde mich der Vollständigkeit halber trotzdem interessieren...
132692
Lösung 132692 14.03.2017 aktualisiert um 10:55:09 Uhr
Goto Top
Imports Microsoft.Office.Interop.Word
'.....  
'..  
Dim rngPage As Range
With wordDocument
 For i = 1 To .ComputeStatistics(wdStatisticPages)
   rngPage = .Selection.GoTo(wdGotoItem.wdGoToPage, wdGotoDirection.wdGoToAbsolute, i)
   rngPage.End = .Selection.Bookmarks("\Page").Range.End  
   If rngPage.Bookmarks.Exists("Demo") Then  
       MsgBox "Bookmark befindet sich auf Seite: " & i  
   End If
 Next
End with

Einfach erst in VBA entwickeln dann 1:1 in VB.Net umsetzen face-smile
ahstax
ahstax 14.03.2017 um 10:51:37 Uhr
Goto Top
bei
rngPage = .Selection.GoTo(wdGoToPage, wdGoToAbsolute, i)
behauptet VBExpress, dass wdGoToPage und wdGoToAbsolute nicht deklariert seien. Hab ich vergessen, etwas zu importieren?
132692
Lösung 132692 14.03.2017 aktualisiert um 10:54:09 Uhr
Goto Top
Das sind Word-Konstanten, die musst du nur aus dem interop-Assembly referenzieren ... WdGoToItem.wdGoToPage und
ahstax
ahstax 14.03.2017 um 10:53:56 Uhr
Goto Top
ich nehm dieses:
rngPage = .Selection.GoTo(Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage, Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute, i)
132692
132692 14.03.2017 aktualisiert um 10:54:46 Uhr
Goto Top
Eben, ist ja logisch wenn man nur mal kurz in die Doku schaut. ..