tipos regresar quita marcadores marcador indice hipervinculo hacer eliminar elimina crear como c# wpf hyperlink ms-word bookmarks

c# - regresar - Hipervínculo a marcador en un documento de MS Word



marcadores en word 2013 (3)

Usar Hyperlink en una aplicación WPF en lugar de en una página web requiere que usted maneje el evento RequestNavigate por su cuenta.

Hay un buen ejemplo aquí .

¿Es posible vincular a un marcador dentro de un documento de Word desde un bloque de texto WPF?

Hasta ahora tengo:

<TextBlock TextWrapping="Wrap" FontFamily="Courier New"> <Hyperlink NavigateUri="..//..//..//MyDoc.doc"> My Word Document </Hyperlink> </TextBlock>

Supongo que la ruta relativa es desde la ubicación del exe. No puedo hacer que el documento se abra en absoluto.


Como una adición a mi respuesta anterior, hay una forma programática de abrir un archivo de Word local, buscar un marcador y colocar el cursor allí. Lo adapté de esta excelente respuesta . Si tienes este diseño:

<TextBlock> <Hyperlink NavigateUri="..//..//MyDoc.doc#BookmarkName" RequestNavigate="Hyperlink_RequestNavigate"> Open the Word file </Hyperlink> </TextBlock>

usa este código:

//Be sure to add this reference: //Project>Add Reference>.NET tab>Microsoft.Office.Interop.Word private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { // split the given URI on the hash sign string[] arguments = e.Uri.AbsoluteUri.Split(''#''); //open Word App Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application(); //make it visible or it''ll stay running in the background msWord.Visible = true; //open the document Microsoft.Office.Interop.Word.Document wordDoc = msWord.Documents.Open(arguments[0]); //find the bookmark string bookmarkName = arguments[1]; if (wordDoc.Bookmarks.Exists(bookmarkName)) { Microsoft.Office.Interop.Word.Bookmark bk = wordDoc.Bookmarks[bookmarkName]; //set the document''s range to immediately after the bookmark. Microsoft.Office.Interop.Word.Range rng = wordDoc.Range(bk.Range.End, bk.Range.End); // place the cursor there rng.Select(); } e.Handled = true; }


De acuerdo con la documentación oficial , debe ser sorprendentemente simple:

<TextBlock> <Hyperlink NavigateUri="..//..//MyDoc.doc#BookmarkName" RequestNavigate=”Hyperlink_RequestNavigate”> Open the Word file </Hyperlink> </TextBlock> private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); e.Handled = true; }

Sin embargo, hay consenso en muchas páginas no oficiales que esto solo funciona

  • con archivos .doc (sin archivos .docx Office 2007), y desafortunadamente
  • solo con Office 2003

Intentar usar esto con archivos .docx producirá un error. Al usar esto con los archivos .doc en Office 2007 y posteriores se abrirá el documento, pero en la primera página.

Es posible que pueda evitar las limitaciones de Office 2007 y superior mediante el uso de macros AutoOpen , consulte aquí cómo pasar un argumento Macro a Word. Eso requeriría cambiar todos los documentos que se utilizarán con ese sistema (y plantear preguntas adicionales sobre el uso de macros).