Range.Find.Execute - 仅转发错误行为

Range.Find.Execute - Forward only misbehave

我正在使用 .Net 库进行 Microsoft Word 2010 互操作

Word.Document doc = wb.Documents[1];
Word.Range range = doc.Range();

range.Find.Forward = true;
range.Find.Execute("HELLO");

MessageBox.Show("Start " + range.Start.ToString());
MessageBox.Show("End " + range.End.ToString());

//make sure it won't even look back
range.Start = range.End;

range.Find.Execute("HELLO");

MessageBox.Show("Start " + range.Start.ToString());
MessageBox.Show("End " + range.End.ToString());

如果文档中有多个"HELLO",返回的范围只是忽略它,它一直在寻找相同的字符串,我一直得到相同的range.Start和range.End 值一遍又一遍。我在这里错过了什么?

我隔离了这个问题,它似乎 只有当 word 文档中有特殊字符时才会发生,特别是如果文本包含在自定义 table 中。在普通的普通文档上它工作正常。

我最终在每次搜索后对 range.Start 值进行采样,如果它与之前的值相同,我将其起始范围增加 + 1,然后重新搜索。

这是一次又一次地完成,虽然它增加了一些搜索,但它非常 stable。

while (range.text.Contains("HELLO"))
{
    range.Find.Execute("HELLO");

    while ((range.Start < intLastFoundRangeStartValue) && (range.Find.Found))
    {
        range.Start += intAddToRangeStartValue;
        intAddToRangeStartValue++;

        range.Find.Execute("HELLO");
    }
}
...

此外,作为一个副产品,它让我不再需要向循环中添加计数器。