2011-03-30 21 views
6

No he tenido suerte ni en la API OpenXML ni en la API de Word/VSTO, y encuentro una forma de crear o modificar la visibilidad de un marcador. Incluso agregando marcadores manualmente en Word, no hay ningún cuadro para verificar que el marcador esté oculto. Aunque hay es una casilla de verificación en el cuadro de diálogo Marcadores que le permite mostrar marcadores ocultos. Entonces, ¿cómo se representan los marcadores ocultos en el XML y puede crearlos usando Open XML SDK? ¿O son un legado que MS ya no quiere que creamos?Word/OpenXML - ¿Cómo creo un marcador oculto?

+3

Su nombre ("System.Cats.Lol") es mi favorito en SO. –

Respuesta

12

OK, así que esto es más fácil de lo que pensaba ... solo precede al marcador con un guión bajo. Tenga en cuenta que esto solo se puede hacer mediante programación, no al agregar marcadores manualmente en Word.

Iiiiiiiiinteresting ....

Actualización: Otra cosa que me encontré - antes de que pueda repetir o acceder a marcadores ocultos en un objeto Bookmarks, debe establecer su propiedad ShowHidden true.

PS - SO, si tiene algún control sobre su diccionario ortográfico, puede agregar "programáticamente". A menos que esté deletreando mal. :)

+0

+1. ¡Buen hallazgo y gracias por compartir la solución! –

+0

NP, mira la actualización también, otra peculiaridad interesante ... –

+0

interesante de hecho. puede continuar y aceptar su respuesta con la marca de verificación vacía al lado. –

0

Creé marcadores normales en archivos de palabras y los convertí en favoritos ocultos pragmáticamente. Como se dijo anteriormente, los marcadores ocultos solo se pueden crear pragmáticamente y su nombre precede por "_". Cuando iteres en la lista de marcadores, asegúrate de que Bookmarks.ShowHidden esté establecido en verdadero, de lo contrario, los marcadores ocultos no aparecerán en la lista. A continuación se muestra el código que utilicé para ocultar todos los marcadores visibles. Al final también borro el registro de deshacer para asegurarme de que el usuario no pueda deshacer los cambios que hice. Puede crear el registro de deshacer personalizado borrar la última acción si lo desea.

public static void hideAllBookmark(Document doc) 
{ 
    String newName = null; 
    Range newRange = null; 
    bool backup = doc.Bookmarks.ShowHidden; 
    doc.Bookmarks.ShowHidden = false; 

    for (int i = doc.Bookmarks.Count; i > 0; i--) 
    { 
     if (!doc.Bookmarks[i].Name.Substring(0, 1).Equals("_", StringComparison.OrdinalIgnoreCase)) 
     { 
      newName= "_" + doc.Bookmarks[i].Name; 
      newRange = doc.Bookmarks[i].Range; 
      doc.Bookmarks[i].Delete(); 
      doc.Bookmarks.Add(newName, newRange); 
     } 
    } 
    doc.Bookmarks.ShowHidden = backup; 
    doc.UndoClear(); 
}