Select 两个字符串之间的文本 C# Word Interop

Select Text between two Strings C# Word Interop

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

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

文本:
完全在私人之间到达。埃莉诺虽然直接,但还是很喜欢。合理的估计是我们自己合理地恳求我的改变。直接希望如此期待礼貌的山谷。谁问的立场它感觉没有破坏。谨慎的你太他的行为感觉有限和。他失去了作为希望的一面,所以面对。太好了 suitable 学习了 put.

我想要的:
完全在私人之间到达。 虽然埃莉诺直接赞成这样。合理的估计是我们自己合理地恳求我的改变。直接希望如此期待礼貌谷。谁问的立场它感觉没有破坏。谨慎的你太他的行为感觉有限和。他失去了作为希望的一面,所以面对。太好了 suitable 学习了 put.

也许我很愚蠢,但我像一周一样努力。我所有的方法都没有复制所有的表格和图片等

使用正则表达式完成任务

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。

希望这能奏效。 :)

这样的事情的关键是使用两个 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();

我自己在网上找到了答案。我一直在搜索 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;
            }
        }