当我使用range.find使用vsto搜索整个文档时,如何跳过表格?

时间:2019-05-30 11:32:31

标签: c# ms-word vsto

现在,我想遍历整个word文档,通过range.find。我需要跳过文档中的表格,然后对所遍历的字符进行自动排版,但是我还没有找到一种排除表格的方法。有什么办法可以解决这个问题?

Information [WdInformation.wdWithInTable]

  Range sRange=Globals.ThisAddIn.Application.Selection.Range
  Range fR = wordDoc.Range(sRange.Start, sRange.End);
                fR.Find.ClearFormatting();
                fR.Find.Text = "[a-zA-Z0-9]{1,}";
                fR.Find.Replacement.ClearFormatting();
                fR.Find.MatchWildcards = true;

                //fR.Find.Wrap = WdFindWrap.wdFindContinue;
                fR.Find.Forward = true;

                object missing = Type.Missing;
                fR.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 (fR.Find.Found)
                {
                    int rs = fR.Start;
                    int re = fR.End;

                    if (rs > sRange.End || re < sRange.Start) break;
                    //if (fR.Information[WdInformation.wdWithInTable])
                    //    continue;

                    fR.Font.Size = (float)tsd.content.enfont.size;
                    fR.Font.Name = tsd.content.enfont.face;
                    fR.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);
                }

我希望排版数据不会以任何方式影响表格,但这是没有用的。

1 个答案:

答案 0 :(得分:1)

可以使用Word.WdInformation.wdWithInTable确定表中是Range还是Selection

在Word COM世界中,这是一个名为Information的属性,它接受各种参数并返回不同种类的信息(布尔值,整数等)。由于C#不支持采用参数的属性,因此将其转换到PIA中的get_Information方法。另外,由于返回值并非都是相同的数据类型,因此该方法返回object,这意味着需要显式转换返回的值。

下面的代码段基于问题中的代码,显示了如何测试找到的Range是否不在表中。

while (fR.Find.Found && !(bool)fR.get_Information(Word.WdInformation.wdWithInTable))
{
    Debug.Print("Not in a table");
}