С#: поиск текста в 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;