Как использовать функцию Microsoft Word API и закладок для программного открытия документа Word в определенном месте?

Я пробую следующий код в приложении Windows Form. Я не уверен, что я делаю неправильно (и я мог бы легко сделать это неправильно, потому что у меня нет большого опыта работы со словом 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);

2 ответов


Как насчет использования объекта Bookmark?

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

Я не проверял, прокручивается ли там окно... но это должно помочь тебе начать.


редактировать: это код VB, который записывается, когда я делаю макрос Goto->Bookmark:

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

вы пытались передать тип.Отсутствует для WhichItem и Count, поэтому он реплицирует вызов VB?


ответ Филипа Уоллеса отлично работает.

чтобы использовать команду GoTo, используйте Word.Application объект

object What = Word.WdGoToItem.wdGoToBookmark;
object oMissing = System.Reflection.Missing.Value;    
wordApp.Selection.GoTo(What, oMissing, oMissing, "bookMarkName");