Wie bereits in den Kommentaren erwähnt, können Sie ein Word
Dokument nicht so durchsuchen, wie Sie es gerade tun. Sie müssen ein Objekt Word.Application
wie erwähnt erstellen und dann das Dokument laden, damit Sie es durchsuchen können.
Hier ist ein kurzes Beispiel, das ich für Sie geschrieben habe. Bitte beachten Sie, dass Sie einen Verweis auf Microsoft.Office.Interop.Word hinzufügen müssen und dann müssen Sie die import-Anweisung zu Ihrer Klasse hinzufügen. Zum Beispiel Imports Microsoft.Office.Interop
. Auch dies greift jeden Absatz und dann den Bereich verwendet, um nach dem Wort zu suchen, nach dem Sie suchen, wenn es gefunden wird, fügt es es der Liste hinzu.
Hinweis: Bewährte - Ich hatte dies in einer Schaltfläche Ereignis, aber setzen Sie, wo Sie es brauchen.
Try
Dim objWordApp As Word.Application = Nothing
Dim objDoc As Word.Document = Nothing
Dim TextToFind As String = YOURTEXT
Dim TextRange As Word.Range = Nothing
Dim StringLines As New List(Of String)
objWordApp = CreateObject("Word.Application")
If objWordApp IsNot Nothing Then
objWordApp.Visible = False
objDoc = objWordApp.Documents.Open(FileName,)
End If
If objDoc IsNot Nothing Then
'loop through each paragraph in the document and get the range
For Each p As Word.Paragraph In objDoc.Paragraphs
TextRange = p.Range
TextRange.Find.ClearFormatting()
If TextRange.Find.Execute(TextToFind,) Then
StringLines.Add(p.Range.Text)
End If
Next
If StringLines.Count > 0 Then
MessageBox.Show(String.Join(Environment.NewLine, StringLines.ToArray()))
End If
objDoc.Close()
objWordApp.Quit()
End If
Catch ex As Exception
'publish your exception?
End Try
aktualisieren Sätze verwenden - das durch jeden Absatz gehen und jeden Satz packen, können wir sehen dann, wenn das Wort existiert ... Der Vorteil davon ist, es ist schneller, weil wir jeden Absatz und dann suche die Sätze. Wir haben den Absatz zu erhalten, um die Sätze zu bekommen ...
Try
Dim objWordApp As Word.Application = Nothing
Dim objDoc As Word.Document = Nothing
Dim TextToFind As String = "YOUR TEXT TO FIND"
Dim TextRange As Word.Range = Nothing
Dim StringLines As New List(Of String)
Dim SentenceCount As Integer = 0
objWordApp = CreateObject("Word.Application")
If objWordApp IsNot Nothing Then
objWordApp.Visible = False
objDoc = objWordApp.Documents.Open(FileName,)
End If
If objDoc IsNot Nothing Then
For Each p As Word.Paragraph In objDoc.Paragraphs
TextRange = p.Range
TextRange.Find.ClearFormatting()
SentenceCount = TextRange.Sentences.Count
If SentenceCount > 0 Then
Do Until SentenceCount = 0
Dim sentence As String = TextRange.Sentences.Item(SentenceCount).Text
If sentence.Contains(TextToFind) Then
StringLines.Add(sentence.Trim())
End If
SentenceCount -= 1
Loop
End If
Next
If StringLines.Count > 0 Then
MessageBox.Show(String.Join(Environment.NewLine, StringLines.ToArray()))
End If
objDoc.Close()
objWordApp.Quit()
End If
Catch ex As Exception
'publish your exception?
End Try
Sie können keine Word-Dokument auf diese Weise suchen . Sie müssen ein Word-Anwendungsobjekt erstellen und die zu suchende Datei laden. – Codexer
Sie können ein Word-Dokument nicht wie eine Textdatei durchsuchen. Ein Word- "Dokument" ist eigentlich eine Zip-Datei, in der die meisten Daten des Dokuments in einer XML-Datei gespeichert sind. Sie müssen eine Dll oder Interop von Drittanbietern verwenden, um das Word-Dokument zu "lesen" und seinen Text zu suchen – soohoonigan
@soohoonigan könnte ich noch ein 'für jede Zeile' verwenden? Oder wie würde ich das Wort Dokument Zeile für Zeile durchlaufen? – Bob