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-Key: 332058

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

Printed on: April 20, 2024 at 02:04 o'clock

Mitglied: 132692
Solution 132692 Mar 14, 2017 updated at 08:43:20 (UTC)
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.
Member: ahstax
ahstax Mar 14, 2017 updated at 08:55:57 (UTC)
Goto Top
So einfach...?
So einfach.

Danke vielmals!!


PS: Das Seitenweise durchsuchen würde mich der Vollständigkeit halber trotzdem interessieren...
Mitglied: 132692
Solution 132692 Mar 14, 2017 updated at 09:55:09 (UTC)
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
Member: ahstax
ahstax Mar 14, 2017 at 09:51:37 (UTC)
Goto Top
bei
rngPage = .Selection.GoTo(wdGoToPage, wdGoToAbsolute, i)
behauptet VBExpress, dass wdGoToPage und wdGoToAbsolute nicht deklariert seien. Hab ich vergessen, etwas zu importieren?
Mitglied: 132692
Solution 132692 Mar 14, 2017 updated at 09:54:09 (UTC)
Goto Top
Das sind Word-Konstanten, die musst du nur aus dem interop-Assembly referenzieren ... WdGoToItem.wdGoToPage und
Member: ahstax
ahstax Mar 14, 2017 at 09:53:56 (UTC)
Goto Top
ich nehm dieses:
rngPage = .Selection.GoTo(Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage, Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute, i)
Mitglied: 132692
132692 Mar 14, 2017 updated at 09:54:46 (UTC)
Goto Top
Eben, ist ja logisch wenn man nur mal kurz in die Doku schaut. ..