C# VSTO:计算所有范围。查找结果
我使用该方法标记特定单词的所有出现处。 此外,我想向用户显示这些单词,或者滚动到它们,甚至只是计算找到了多少单词 我目前正在使用此代码:C# VSTO:计算所有范围。查找结果,c#,ms-word,vsto,C#,Ms Word,Vsto,我使用该方法标记特定单词的所有出现处。 此外,我想向用户显示这些单词,或者滚动到它们,甚至只是计算找到了多少单词 我目前正在使用此代码: Word.Range range = Globals.ThisAddIn.Application.ActiveDocument.Range(); range.Find.HitHighlight( FindText: "dog", MatchCase: false, MatchWholeWord: true, HighlightCo
Word.Range range = Globals.ThisAddIn.Application.ActiveDocument.Range();
range.Find.HitHighlight(
FindText: "dog",
MatchCase: false, MatchWholeWord: true,
HighlightColor: item.color);
问题是,是否有方法使用该方法或使用其他方法返回我提到的请求之一,或者除了使用以下代码之外别无选择:
var text = range.Text.Split(' ');
text.Count(word => word.Equals("dog"));
(我不喜欢使用此代码,因为我相信有一种方法可以使用MSWord的工具,而不是自己获取所有文本)在Word对象模型中,没有任何东西可以返回使用
HitHighlight
找到的所有“点击”。通常,它不是根据任何特定属性来返回非连续范围集合的
如果你只想计数,那么你已经拥有的C代码可能是执行速度最快的。您将丢失任何格式和位置信息,但计数并不重要
对于任何其他操作,您都需要执行常规的查找。在循环中执行,将每个找到的范围添加到数组中(或任何内容)。例如,这将允许您向用户显示包含周围文本的列表
成功查找时使用Range.Find
(与Document.Content.Find
)相反,Range
对象包含找到的文本。这样做的诀窍是,在成功查找后,必须重置范围才能继续。类似这样的内容(从内存键入,因此可能是语法错误):
嗯,实际上Word在最近的版本中已经内置了这个工具。按Ctrl+F以获取“查找”窗格。在顶部输入你想搜索的词,Word将显示整个列表-从列表中选择感兴趣的词…是的,我当然知道!我只是需要用编程的方式来做这件事。好吧-不是所有来自C方的人都知道这些事情:-)只是想确定你真的想“重新发明轮子”!
Word.Range rngDoc = wrdDocument.Content;
Word.Range rngFind = rngDoc.Duplicate;
bool bFound = true;
object 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;
}
}