1

我想选择并复制两个给定字符串之间的范围。复制图片或表格也很重要。对我来说很难解释,我希望这个例子会有所帮助:

        Application word = new Application();
        word.Visible = true;
        object findtext = "Favour";
        object findtext2 = "valley";
        Document d2 = word.Documents.Open(@"Path");
        Range range = d2.Content;

        range.Find.Execute(ref findtext, ref missing, ref missing, ref 
        missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing, ref missing, ref missing, ref missing, ref 
        missing);
        range.Select();
        .........

文本:
完全到达私人之间。虽然 elinor 直接喜欢这样,但还是挺喜欢的。合理的估计是我们自己合理地恳求我的改变。直接希望如此期待礼貌的山谷。谁的要求受得了它的感觉没有被破坏。谨慎你太他的行为感觉有限和。他失去了希望,所以面对现实。善良做了合适的学习放。

我想要什么:
完全到达私人之间。虽然 elinor 直接喜欢这样,但还是挺喜欢的。合理的估计是我们自己合理地恳求我的改变。直接希望如此客气的谷。谁的要求受得了它的感觉没有被破坏。谨慎你太他的行为感觉有限和。他失去了希望,所以面对现实。善良做了合适的学习放。

也许我很愚蠢,但我像一周一样工作。我所有的方法都不会复制所有的表格和图片等。

4

3 回答 3

2

像这样的事情的关键是使用两个 Range对象:一个作为起点,另一个作为终点,这样一个范围可以扩展到包括另一个。我已经扩展了问题中的代码以进行说明。

请注意,通常不需要在 Word 文档之间(或之内)复制内容。Range.FormattedText属性可以快速传输格式化信息,而无需在剪贴板上放置任何内容。这两种变体都包括在下面。

Application word = new Application();
word.Visible = true;
object findtext = "Favour";
object findtext2 = "valley";
Document d2 = word.Documents.Open(@"Path");
Range range = d2.Content;
Range rngEnd = null;

range.Find.Execute(ref findtext, ref missing, ref missing, ref missing, ref
  missing, ref missing, ref missing, ref missing, ref missing, 
  ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
rngEnd = range.Duplicate;

rngEnd.Find.Execute(ref findtext2, ref missing, ref missing, ref 
  missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
  ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
range.End = rngEnd.End;

targetDocument.Paragraphs.Last.Range.FormattedTExt = range.FormattedText;
//range.Copy();
于 2019-08-21T11:23:21.643 回答
1

我自己在网上找到了答案。我一直在寻找 C# 代码,但从未尝试过使用 VBA 代码。在可笑的 5 分钟后,我得到了一个我苦苦挣扎了两周的问题的答案。

 Application word = new Application();
        word.Visible = true;

        Document doc= 
        word.Documents.Open(@"PATH");

        Range rng;
        Range rngText;
        object strStart = "STRING";
        object strEnd= "STRING";


        rng = doc.Content;
        rngText = doc.Range(0, 0);
        if(rng.Find.Execute(ref strStart))
        {
            rngText.SetRange(rng.Start,rng.End);
            rng.SetRange(rng.End, doc.Range().End   );
            if(rng.Find.Execute(ref strEnd))
            {
                rngText.SetRange(rngText.Start,rng.Start);

                rngText.Select();
                rngText.Font.Color = WdColor.wdColorAqua;
            }
        }
于 2019-08-22T11:59:57.583 回答
-2

使用正则表达式完成您的任务

String Prefix = "Favour";
String Suffix = "valley";
String RegexForm = String.Format(@"(?<={0}\s).*(?=\s{1})", Prefix, Suffix);

Regex r = new Regex(RegexForm, RegexOptions.Compiled);

String Data = "Arrived totally in as between private. Favour of so as on pretty though elinor direct. Reasonable estimating be alteration we themselves entreaties me of reasonably. Direct wished so be expect polite valley. Whose asked stand it sense no spoil to. Prudent you too his conduct feeling limited and. Side he lose paid as hope so face upon be. Goodness did suitable learning put.";

Match m = r.Match(Data);

Console.WriteLine("Match => " + Prefix + m.Value + Suffix);

匹配包含起始索引和原始字符串的长度。

如果您需要获得 2 个以上的结果,请使用 r.Matches 而不是 r.Match。

希望这有效。:)

于 2019-08-21T07:42:31.070 回答