这实际上是一个XY问题,但我想要两者的答案。 我需要解决的是X,我的解决方案是Y,但它不起作用。 我正在使用word自动化并使用vs10和msWord10。
我会从X开始,因为它最有意义!
我有一个大的动态字符串,其中包含一些我想要提取的单词。我想要提取的单词是标签 - 请参阅下面的示例。
示例:
这是一些可能是任何内容的文本。 !#我想要的文字#! 还有一些文本可以是任何东西!#还有一些我希望得到的文字#!
“!#”是startTag和“#!”是endTag
输出:
我想要的文字
我想要的更多文字
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的答案。
答案 0 :(得分:1)
您有两个引用到同一个Range
。使用:
Word.Range range2 = range.Duplicate