В объектной модели Word нет ничего, что возвращало бы все "совпадения", найденные с помощью HitHighlight
. Он просто не предназначен для возврата несмежных коллекций Range, как правило, в соответствии с какими-либо конкретными атрибутами.
Если вы просто хотите посчитать, код C #, который у вас уже есть, вероятно, самый быстрый в исполнении. Вы потеряете любую информацию о форматировании и местоположении, но для подсчета это не важно.
Для чего-либо еще вам нужно сделать обычный Find.Execute
в цикле, добавив каждый найденный Range
в массив (или что-то еще). Это позволит вам показать список пользователю с окружающим текстом, например.
Когда вы используете Range.Find
(в отличие от Document.Content.Find
) при успешном поиске, объект Range
содержит найденный текст. Трюк с чем-то вроде этого заключается в том, что после успешного поиска необходимо сбросить диапазон, чтобы продолжить. Примерно так (набирается из памяти, поэтому возможно синтаксические ошибки):
Word.Range rngDoc = wrdDocument.Content;
Word.Range rngFind = rngDoc.Duplicate;
bool bFound = true;
var oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
while (bFound)
{
bFound = rngFind.Find.Execute(/*params here*/);
if (bFound)
{
//Do something with rngFind
//Set the start of the Range to search AFTER what was found
rngFind.Collapse(ref oCollapseEnd);
//and extend it to the end of the original Range
// in this case the entire document
rngFind.End = rngDoc.End;
}
}