2010-10-25 6 views
10

riesco a trovare un testo in un file di Word tramite:C#: ricerca di un testo in Word e ottenere la gamma del risultato

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); 

Questo mi dice che se si trova il testo. Ma ho bisogno della gamma del testo trovato.

+0

Codice precedente: oggetto privato mancante = Type.Missing; – simon

+0

Non sono sicuro che voi ragazzi/ragazze, ma ho trovato questa API un po 'confusa all'inizio. Mi aspetterei 'range.Find.Execute (..)' per restituire un nuovo oggetto range piuttosto che modificare quello alla radice ('Document.Content'). –

risposta

3

L'oggetto intervallo deve essere modificato eseguendo la ricerca su di esso.

Quindi, probabilmente dovresti usare range.Start e range.End per ottenere le posizioni dei caratteri. Reference

8

Hai provato questo:

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

Nel tuo codice dici "// Ottieni indice selezionato". Puoi postare il codice qui? Stai assumendo che le persone sappiano come ottenere l'indice selezionato. –

2

Ottiene un range da parola utilizzando il metodo find e formattarlo.

//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 rendimenti true se trovato, e imposta range alla gamma trovato:

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

Nota che range.Find.Execute cercherà la gamma dopo range se range è già un match per il Trova condizioni (dopo la prima range.Find.Execute).

Ad esempio, questa macro VBA troverà solo la seconda "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;