现在,我想遍历整个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);
}
我希望排版数据不会以任何方式影响表格,但这是没有用的。
答案 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");
}