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

本文关键字:一个对象 Range Word 对象 为什么 | 更新日期: 2023-09-27 18:21:33

这实际上是一个XY问题,但我想要两者的答案。我需要解决的是X,我的解决方案是Y,但它不起作用。我正在研究单词自动化,并使用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);
        }
    }

我以前运行过这个代码,它运行得很好,但在这种情况下,范围对象被设置为单词文档的范围,这次不能这样做,因为我只想在特定的范围内搜索。

然而,当我第一次运行Find.Execute()时,问题就出现了,然后它找到了第一个命令TagStart,并将range1对象设置为该标记的范围,这很好,但由于某些原因,range2对象也会更改。

每次我改变一个范围对象(范围1或范围2)或对这些对象做一些事情时,它们都会改变,我不知道为什么?

我只需要解X,但我真的很感激Y的答案。

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

您对同一Range有两个引用。用途:

Word.Range range2 = range.Duplicate