使用Word Interop卡在word文档中的嵌套表中

时间:2018-01-21 11:50:19

标签: c# ms-word office-interop

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;书签。非常感谢任何有关离开桌面并继续进行处理的帮助。

1 个答案:

答案 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。但是,考虑到你想逐行工作,你真的没有多少选择。但是,如果这些行实际上是段落(最后回车),那么有一种更有效,更简洁的方式来编码你所拥有的。