C #: поиск текста в Word и получение диапазона результата - PullRequest
10 голосов
/ 25 октября 2010

Я могу найти текст в файле 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);

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

Ответы [ 4 ]

8 голосов
/ 25 октября 2010

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

 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);
} 
3 голосов
/ 25 октября 2010

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

Так что, скорее всего, вы бы использовали range.Start и range.End, чтобы получить позиции персонажей. Ссылка

2 голосов
/ 23 апреля 2016

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
2 голосов
/ 24 марта 2014

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

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