如何从word文档中获取所有匹配通配符的字符串

时间:2013-11-22 22:16:05

标签: c# .net ms-word find office-interop

我正在尝试编写一个应用程序来搜索word文档中的所有出现,其中some_text是<之间的任何字符串。和>。当我找到每场比赛时,我想存储/展示/做每件事。

这是我到目前为止所拥有的:

Word._Application word = new Word.Application();
Word.Documents d = word.Documents;
Word._Document doc;

doc = d.Open(strFileName);
doc.Activate();

foreach (Word.Range myStoryRange in doc.StoryRanges)
{
    myStoryRange.Find.MatchWildcards = true;
    myStoryRange.Find.Text = "[<]*[>]";
    myStoryRange.Find.Execute();

    // Somehow get the result string that matched the wildcard
}

1 个答案:

答案 0 :(得分:3)

事实证明,为每个找到的字符串重新定义了Range。您可以访问每个找到的文本:

rng.Text

您可以在更大的范围内找到找到的文本字符位置:

rng.Start
rng.End

所以我能够通过声明一个只包含Find循环中找到的字符串的本地Range来做到这一点。我用DocProperty替换每个文本,但你可以用它做任何你喜欢的事情:

    Word.Range rng = this.Content;
    rng.Find.MatchWildcards = true;
    rng.Find.Text = "[<]*[>]";

    while (rng.Find.Execute())
    {
        // create a local Range containing only a single found string
        object cstart = rng.Start;
        object cend   = rng.End;
        Word.Range localrng = this.Range(ref cstart, ref cend);

        // replace the text with a custom DocProperty
        Word.Field newfld = localrng.Fields.Add(localrng, Word.WdFieldType.wdFieldDocProperty, "MyDocProp", false);
        localrng.Fields.Update();
    }