2010-10-25 13 views
10

je peux trouver un texte dans un fichier Word via:C#: la recherche d'un texte dans Word et d'obtenir la gamme du résultat

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

Cela me dit si le texte se trouve. Mais j'ai besoin de la gamme du texte trouvé.

+0

Plus tôt dans le code: objet privé manquant = Type.Missing; – simon

+0

Je ne suis pas sûr de vous, mais j'ai trouvé cette API un peu déroutante au début. Je m'attendrais 'range.Find.Execute (..)' à retourner un nouvel objet de gamme plutôt que de changer celui à la racine ('Document.Content'). –

Répondre

3

L'objet range doit être modifié en exécutant find. Par conséquent, il est probable que vous utiliseriez range.Start et range.End pour obtenir les positions de caractère. Reference

8

Avez-vous essayé ceci:

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

Vous dites dans votre code "// Obtenir l'index sélectionné". Pouvez-vous s'il vous plaît code postal ici? Vous supposez que les gens savent comment obtenir l'index sélectionné. –

2

Obtient une plage de mot en utilisant la méthode de trouver et formater.

//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 retours true si elle est trouvée, et met range à la gamme trouvée:

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

Notez que range.Find.Execute cherchera la gamme après range si range est déjà un match pour le trouver des conditions (après la premier range.Find.Execute).

Par exemple, cette macro VBA ne trouvera que le second "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;