Range.Find.Execute - 只转发行为异常

时间:2015-05-10 11:37:22

标签: c# .net ms-word office-interop

我正在使用.Net库进行Microsoft Word 2010 interoping

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”,则返回的范围只是忽略它,它会一直找到相同的字符串,我会一直得到相同的范围.Start和range.End值一遍又一遍。我在这里失踪了什么?

1 个答案:

答案 0 :(得分:0)

我隔离了问题,只有在word文档中有特殊字符时才会出现,特别是如果文本包含在自定义表格中。在普通的普通文件上,它可以正常工作。

我最终对范围进行了采样。每次搜索后的启动值,如果它与前一个相同,我将它的起始范围增加+ 1,然后重新搜索。

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

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

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

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

此外,作为副产品,它使我无需在循环中添加计数器。