更改其中一个时,为什么所有Word.Range对象都会发生变化?

时间:2014-09-12 07:55:14

标签: c# search ms-word range office-automation

这实际上是一个XY问题,但我想要两者的答案。 我需要解决的是X,我的解决方案是Y,但它不起作用。 我正在使用word自动化并使用vs10和msWord10。

我会从X开始,因为它最有意义!

X(真正的问题):

我有一个大的动态字符串,其中包含一些我想要提取的单词。我想要提取的单词是标签 - 请参阅下面的示例。

示例:

这是一些可能是任何内容的文本。 !#我想要的文字#! 还有一些文本可以是任何东西!#还有一些我希望得到的文字#!

“!#”是startTag和“#!”是endTag

输出:

我想要的文字

我想要的更多文字

Y(我对X的解决方案)

public void doSomething_TEST(string text, Word.Range range)
    {
        string commandsTagStart = "!#";
        string commandsTagEnd = "#!";

        Word.Range range1 = range;
        Word.Range range2 = range;

        range1.Find.Execute(commandsTagStart);
        while (range1.Find.Found)
        {
            if (range1.Text.Contains(commandsTagStart))
            {
                range2.Find.Execute(commandsTagEnd);
                if (range1.End < range2.Start)
                {
                    Word.Range nameRange = document.Range(range1.End, range2.Start);
                }
            }
            range1.Find.Execute(commandsTagStart);
        }

    }

我已经在它完美工作之前运行了这个代码但是在这种情况下,范围对象设置为word文档的范围并且这次无法完成,因为我只想搜索特定范围。

但是当我第一次运行Find.Execute()时出现问题,然后它找到第一个commandsTagStart,并将range1对象设置为该标签的范围,这是好的,但由于某种原因,range2对象也会改变。

每当我更改其中一个范围对象(range1或range2)或对某些对象执行某些操作时,它们都会更改,我不知道为什么会这样做?

我只需要解决X但我真的很感谢Y的答案。

1 个答案:

答案 0 :(得分:1)

您有两个引用到同一个Range。使用:

Word.Range range2 = range.Duplicate