8

我正在 Windows 窗体应用程序中尝试以下代码。我不确定我做错了什么(我很容易做错,因为我没有太多使用 Word API 的经验)但是 GoTo 命令就是找不到书签。我总是在最后一行收到 COMException,“此书签不存在”。

但该wordDoc.Bookmarks.get_Item(ref name)方法确实找到了书签!是什么赋予了?

Object fileName = System.Windows.Forms.Application.StartupPath + "\\Bookmarks.docx";
Object readOnly = false;
Object isVisible = true;
Object missing = System.Reflection.Missing.Value;

Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document wordDoc = new Microsoft.Office.Interop.Word.Document();

wordApp.Visible = true;
wordDoc = wordApp.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);

Object item = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToBookmark;
Object whichitem = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToFirst;
Object count = 1;
Object name = "Location3";

Bookmark bMark = wordDoc.Bookmarks.get_Item(ref name);
wordDoc.GoTo(ref item, ref whichitem, ref count, ref name);
4

2 回答 2

9

使用 Bookmark 对象怎么样?

    object bookmarkName = "Location3";
    if (wordDoc.Bookmarks.Exists(bookmarkName.ToString()))
    {
        Bookmark bookmark = wordDoc.Bookmarks.get_Item(ref bookmarkName);
        bookmark.Select();
    }

我没有检查窗口是否在那里滚动......但这应该让你开始。


编辑:这是我执行 Goto->Bookmark 宏时记录的 VB 代码:

Selection.GoTo What:=wdGoToBookmark, Name:="Location3"

您是否尝试为WhichItem 和Count 传递Type.Missing 以便复制VB 调用?

于 2009-10-29T20:35:40.927 回答
1

菲利普华莱士的回答效果很好。

要使用 GoTo 命令,请使用Word.Application对象

object What = Word.WdGoToItem.wdGoToBookmark;
object oMissing = System.Reflection.Missing.Value;    
wordApp.Selection.GoTo(What, oMissing, oMissing, "bookMarkName");
于 2017-04-23T17:12:07.380 回答