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