2009-10-29 16 views
5

Estoy intentando el siguiente código en una aplicación de Windows Form. No estoy seguro de lo que estoy haciendo mal (y podría estarlo haciendo mal porque no tengo mucha experiencia con la API de Word), pero el comando Ir a simplemente no puede encontrar el marcador. Siempre obtengo una COMException en la última línea, "Este marcador no existe".¿Cómo uso la API de Microsoft Word y la función Marcadores para abrir un documento de Word mediante programación en una ubicación específica?

¡Pero el método wordDoc.Bookmarks.get_Item(ref name) encuentra el marcador! ¿Qué ofrece?

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

Respuesta

7

¿Qué le parece usar el objeto Bookmark?

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

No he comprobado si la ventana se desplaza hacia allí ... pero esto debería comenzar.


EDITAR: Este es el código de VB que se graba cuando hago un Goto-> Marca de macro:

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

¿Usted intentó pasar Type.Missing para WhichItem y el recuento de lo que se replica la llamada VB?

+0

El comando bookmark.Select() trabajó como un encanto. No estoy seguro de lo que estaba mal con el comando GoTo. Probé todas las combinaciones de eso. –

1

La respuesta de Philip Wallace funciona muy bien.

Para utilizar Goto, Usar la Word.Application objeto

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

Noté que usaba Application.Selection.GoTo pondrá el marcador en la parte superior de la página mientras que usando el objeto Bookmark puso el marcador en la parte inferior de la página visible (en realidad tuvo que desplazarse hacia abajo para ver el marcador). – Mike

Cuestiones relacionadas