while (doc.ActiveWindow.Selection.Bookmarks.Exists(@"\EndOfDoc") == false)
{
//Skiping table content and proceeding with only paragraphs
if (doc.ActiveWindow.Selection.get_Information(WdInformation.wdWithInTable) == false)
{
doc.ActiveWindow.Selection.EndKey(ref wdLine, ref wdExtend);
currLine = doc.ActiveWindow.Selection.Text;
temp = currLine;
// Move to next line after assigning to temp
doc.ActiveWindow.Selection.MoveDown(ref wdLine, ref wdCountOne, ref wdMove);
doc.ActiveWindow.Selection.HomeKey(ref wdLine, ref wdMove);
//<Match some text on paragraph>
if (temp.StartsWith(searchValue))
{
resultValue = temp;
break;
}
}
else //If its a table
{
// navigate to next line
while (doc.ActiveWindow.Selection.get_Information(WdInformation.wdWithInTable) == true)
{
if (doc.ActiveWindow.Selection.Bookmarks.Exists(@"\EndOfDoc"))
break;
doc.ActiveWindow.Selection.MoveDown(ref wdLine, ref wdCountOne, ref wdMove);
doc.ActiveWindow.Selection.HomeKey(ref wdLine, ref wdMove);
}
doc.ActiveWindow.Selection.MoveDown(ref wdLine, ref wdCountOne, ref wdMove);
doc.ActiveWindow.Selection.HomeKey(ref wdLine, ref wdMove);
}
}
我是C#的新手,我正在尝试使用Interop读取word文档。在这样做时,我被困在文档中存在的嵌套表中,并且控件会无限期地循环遍历此表。这里的问题似乎是它无法摆脱桌面,因此无法找到&#34; \ EndOfDoc&#34;书签。非常感谢任何有关离开桌面并继续进行处理的帮助。
答案 0 :(得分:0)
您可以为Table对象创建一个Range,然后将该Range折叠到它的终点以超出表格。这将取代第二个while循环:
Word.Range rngTable = null;
object oCollapseEnd = WdCollapseDirection.wdCollapseEnd;
if (doc.ActiveWindow.Selection.get_Information(WdInformation.wdWithinTable) == true)
{
rngTable = doc.ActiveWindow.Selection.Tables[1].Range;
rngTable.Collapse(ref oCollapseEnd);
rng.Select();
}
注意1:我在脑海中输入这个内容是因为我不在我可以测试它的机器上,所以要小心语法错误...
注意2:您可能想尝试声明一个Selection对象,而不是使用doc.ActiveWindow ....因为它更容易阅读,更容易键入并且可能更有效地执行:
Word.Selection sel = doc.ActiveWindow.Selection
注3:通常情况下,你根本不应该使用Selection,而是使用Ranges。但是,考虑到你想逐行工作,你真的没有多少选择。但是,如果这些行实际上是段落(最后回车),那么有一种更有效,更简洁的方式来编码你所拥有的。