Как использовать Microsoft Word API и функцию «Закладки» для программного открытия документа Word в определенном месте? - PullRequest
6 голосов
/ 29 октября 2009

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

Ответы [ 2 ]

7 голосов
/ 29 октября 2009

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

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

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


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

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

Вы пытались передать Type.Missing для WhichItem и Count, чтобы он повторял вызов VB?

1 голос
/ 23 апреля 2017

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

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

object What = Word.WdGoToItem.wdGoToBookmark;
object oMissing = System.Reflection.Missing.Value;    
wordApp.Selection.GoTo(What, oMissing, oMissing, "bookMarkName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...