С#: поиск текста в Word и получение диапазона результата

Я могу найти текст в файле Word через:

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

Это говорит мне, найден ли текст. Но мне нужен диапазон найденной текстовой части.

Ответ 1

Вы пробовали это:

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

Ответ 2

Объект диапазона должен быть изменен путем выполнения поиска на нем.

Итак, вероятно, вы бы использовали range.Start и range.End, чтобы получить позиции символа. Ссылка

Ответ 3

Получает диапазон от слова, используя метод find, и отформатируйте его.

//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;
}

Ответ 4

range.Find.Execute возвращает true, если найден, и устанавливает range в найденный диапазон:

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

Обратите внимание, что range.Find.Execute будет искать диапазон после range, если range уже соответствует условиям поиска (после первого range.Find.Execute).

Например, этот макрос VBA найдет только второе "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

Ответ 5

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