2010-10-25 13 views
10

mogę znaleźć tekst w pliku Worda poprzez:C#: Wyszukiwanie tekstu w programie Word i coraz zakres wyniku

Word.Range range = wordApp.ActiveDocument.Content; 
Word.Find find = range.Find; 
find.Text = "xxx"; 
find.ClearFormatting(); 
find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, 
    ref missing, ref missing, ref missing, ref missing, ref missing, 
    ref missing, ref missing, ref missing, ref missing, ref missing); 

to mówi mi, jeśli tekst został znaleziony. Ale potrzebuję zakresu znalezionego tekstu.

+0

Wcześniej w kodzie: brak obiektu prywatnego = Type.Missing; – simon

+0

Nie jestem pewien/chłopaki/dziewczyny, ale początkowo uważałem, że to API jest nieco mylące. Spodziewam się, że 'range.Find.Execute (..)' zwróci nowy obiekt zakresu zamiast zmieniania go w katalogu głównym ('Document.Content'). –

Odpowiedz

3

Obiekt zakresu powinien zostać zmieniony przez wykonanie znalezienia na nim.

Prawdopodobnie użyjesz range.Start i range.End, aby uzyskać pozycje postaci. Reference

8

Czy próbowałeś to:

range.Find.Execute(
     ref missing, ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, ref missing); 


while (range.Find.Found) 
{ 
    //Get selected index. 
    // Do as you please with range... 
    //Positions: range.Start... range.End 
    //search again 
    range.Find.Execute(
     ref missing, ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, ref missing, 
     ref missing, ref missing, ref missing, ref missing, ref missing); 
} 
+1

Mówisz w swoim kodzie "// Pobierz wybrany indeks." Czy możesz wpisać tutaj kod? Zakładasz, że ludzie wiedzą, jak uzyskać wybrany indeks. –

2

Pobiera zakres od słowa stosując metodę znalezienia i sformatować go.

//Parameter contains what you want to find. 
_wordApp.Selection.Find.Execute(title); 

Word.Range range = _wordApp.Selection.Range; 
if (range.Text.Contains(title)) 
{ 
    //gets desired range here it gets last character to make superscript in range 
    Word.Range temprange = _document.Range(range.End - 1, range.End);   
    temprange.Select(); 
    Word.Selection currentSelection = _wordApp.Selection; 
    currentSelection.Font.Superscript = 1; 
} 
2

range.Find.Execute powraca true przypadku stwierdzenia, i ustawia range do znalezionego działy

var range = doc.Range(); 
while (range.Find.Execute("xxx")) 
    Debug.Print(range.Text); 

Zauważ, że range.Find.Execute przeszuka zakres po range jeśli range jest już mecz dla Znajdź warunków (po najpierw range.Find.Execute).

Na przykład, makro VBA znajdzie tylko drugi "B":

Sub Macro1() 
    ActiveDocument.Range.Text = "abba" 
    Dim r As Range 
    Set r = ActiveDocument.Range(1, 2) ' the first "b" 
    Debug.Print r.Start; r.End  ' prints " 1 2 " 

    Debug.Print r.Find.Execute("b") ' prints "True" 
    Debug.Print r.Start; r.End  ' prints " 2 3 " 

    Debug.Print r.Find.Execute("b") ' prints "False" (if r.Find.Wrap = wdFindStop) 
    Debug.Print r.Start; r.End  ' prints " 2 3 " 
End Sub 
-2

Microsoft.Office.Interop.Word.WdReplace.wdReplaceOne;

Powiązane problemy