在两个字符串之间选择文本C#Word Interop

时间:2019-08-21 07:19:59

标签: c# ms-word word-interop

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

        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();
        .........

文本:
完全在私人之间到达。这样的恩惠尽管相当直接。合理的估计是改变,我们自己也使我信服。直接希望如此有礼貌的山谷。谁站起来,这丝毫没有破坏。也要谨慎,他的举止有限。一面他失去了希望,因此面对了。善良的学习方式很合适。

我想要什么:
完全在私人之间到达。 尽管如此,还是很受欢迎。合理的估计是改变,我们自己也使我信服。直接希望如此,请期待礼貌的山谷 。谁站起来,这丝毫没有破坏。也要谨慎,他的举止有限。一面他失去了希望,因此面对了。善良的学习方式很合适。

也许我很愚蠢,但是我像一个星期那样工作。我所有的方法都不会复制所有Tabeles和Pictures等。对不起,我的英语不好

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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;
            }
        }

答案 2 :(得分:-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。

希望这行得通。 :)