代码之家  ›  专栏  ›  技术社区  ›  user1181942

Word interop将样式应用于所有匹配项

  •  0
  • user1181942  · 技术社区  · 5 年前

    我写了一些代码来在word文件中查找引文,并试图使所有引文都上标。

    Word.Range rngCitations = doc.Content;
            rngCitations.Find.MatchWildcards = true;
            rngCitations.Find.Text = @"(\[[0-9]{1,}[,0-9]*\])";
            if (rngCitations.Find.Execute())
            {
                rngCitations.Font.Superscript = 1;
                rngCitations.Font.Bold = 1;
    
             }
    

    但是,只有第一次匹配更新到上标。如何更改此代码以将样式应用于所有匹配项。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Athanasios Kataras    5 年前

    要循环,可以使用官方示例: https://docs.microsoft.com/en-us/visualstudio/vsto/how-to-programmatically-loop-through-found-items-in-documents?view=vs-2019

    rng.Find.ClearFormatting(); 
    rng.Find.Forward = true; 
    rng.Find.Text = "find me"; 
    
    rng.Find.Execute(
        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, ref missing);
    
    while (rng.Find.Found) 
    { 
        intFound++;
        rng.Find.Execute(
            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, ref missing);
    }
    

    在你的情况下,如果时间长了,就改变

    while (rngCitations.Find.Execute())
    {
          rngCitations.Font.Superscript = 1;
          rngCitations.Font.Bold = 1;
    }