2009-10-29 8 views
5

J'essaye le code suivant dans une application Windows Form. Je ne suis pas sûr de ce que je fais mal (et je pourrais facilement le faire mal parce que je n'ai pas beaucoup d'expérience avec l'API de Word) mais la commande GoTo ne trouve tout simplement pas le signet. J'ai toujours une exception COMException sur la dernière ligne, "Ce signet n'existe pas." La méthode wordDoc.Bookmarks.get_Item(ref name) trouve le signet! Que donne?Comment puis-je utiliser la fonctionnalité Microsoft Word API et Bookmarks pour ouvrir par programme un document Word à un emplacement spécifique?

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); 

Répondre

7

Comment l'utilisation de l'objet favori? Je n'ai pas vérifié si la fenêtre défile à cet endroit ... mais cela devrait vous aider à démarrer.


EDIT: Voici le code VB qui est enregistré lorsque je fais un Goto> Signet macro:

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

Avez-vous essayé passer Type.Missing pour WhichItem et le comte de sorte qu'il réplique l'appel VB?

+0

La commande bookmark.Select() a fonctionné comme un charme. Je ne suis pas sûr de ce qui n'allait pas avec la commande GoTo. J'ai essayé toutes les combinaisons de celui-ci. –

1

La réponse de Philip Wallace fonctionne très bien.

Pour utiliser la commande GoTo, utilisez l'objet Word.Application

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

J'ai remarqué que l'utilisation de Application.Selection.GoTo mettra le signet en haut de la page alors que l'utilisation de l'objet Bookmark placera le marque-page au bas de la page visible (il a fallu faire défiler vers le bas pour voir le signet). – Mike