Cómo trabajar con índices y tablas de Word en .NET
Cómo trabajar con índices y tablas de Word en .NET
Esta guía muestra cómo insertar y crear las estructuras de referencia impulsadas por campos que los documentos de Word usan para resumir su propio contenido — una tabla de contenido, un índice alfabético y una tabla de autoridades — con Aspose.Words FOSS para .NET. Cada una se compila a partir de campos marcador en otra parte del documento: FieldToc compila entradas basadas en encabezados y marcadas con FieldTC, FieldIndex compila marcadores FieldXE, y FieldToa compila citas FieldTA. Cada clase de campo en esta familia deriva del tipo base Field en el espacio de nombres Aspose.Words.Fields.
Guía paso a paso
Paso 1: Insertar una tabla de contenido
Llame a DocumentBuilder.InsertTableOfContents(switches) en la posición donde debe aparecer la tabla de contenido, pasando una cadena de conmutadores de campo al estilo de Word — por ejemplo "\o \"1-3\" \h \z \u" — para controlar qué niveles de encabezado se incluyen y cómo se formatea el resultado, los mismos conmutadores que Word escribe cuando se inserta una tabla de contenido a través de su interfaz. Esto inserta un FieldToc, que también expone la misma estructura directamente como propiedades: HeadingLevelRange/EntryLevelRange para los niveles de esquema incluidos, InsertHyperlinks, PreserveTabs/PreserveLineBreaks, y BookmarkName. Para una tabla de figuras en lugar de una tabla de contenido, establezca TableOfFiguresLabel o CaptionlessTableOfFiguresLabel en el mismo FieldToc.
Paso 2: Marcar entradas personalizadas de la tabla de contenido
No todas las entradas que debe incluir un TOC provienen de un estilo de encabezado. Inserte un FieldTC en una ubicación específica para marcarla como una entrada del TOC independiente del estilo de párrafo: FieldTC.Text es el texto de la entrada, EntryLevel es el nivel de esquema en el que debe aparecer, y OmitPageNumber suprime el número de página para esa entrada. Cuando un documento necesita más de un TOC — por ejemplo, un TOC principal y una tabla de figuras separada — establezca FieldTC.TypeIdentifier para que coincida con el EntryIdentifier del FieldToc que debe recopilarlo.
Paso 3: Crear un índice a partir de entradas marcadas
Marque cada ubicación que pertenezca al índice con un FieldXE, configurando Text como el texto de la entrada; EntryType agrupa las entradas en subniveles usando una sintaxis separada por dos puntos, y PageRangeBookmarkName marca un marcador cuyo alcance se convierte en un rango de páginas en el índice en lugar de un número de página único. FieldIndex compila cada marcador FieldXE del documento en el resultado alfabético — establezca Heading para insertar separadores de encabezado de letras (A, B, C…), LetterRange para limitar el índice a una parte del alfabeto, y RunSubentriesOnSameLine para controlar el diseño de subentradas. PageNumberSeparator, PageRangeSeparator, SequenceSeparator y CrossReferenceSeparator controlan la puntuación entre una entrada y su referencia de página. Los estilos visuales de índice incorporados en Word están disponibles como el enum FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Paso 4: Crear una tabla de autoridades a partir de citas
Marque cada cita en el texto con un FieldTA: LongCitation y ShortCitation contienen el texto de la cita, EntryCategory la agrupa bajo un encabezado como “Casos” o “Estatutos”, y IsBold/IsItalic controlan su formato. FieldToa compila esas citas en una tabla — EntryCategory selecciona qué categoría compilar, UseHeading controla si aparecen los encabezados de categoría, UsePassim aplica la convención “passim” para fuentes citadas muchas veces, y PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting controlan el diseño.
Paso 5: Actualizar campos después de que el documento cambie
Un TOC, índice o tabla de autoridades no se actualiza automáticamente cuando el contenido circundante cambia. Llame a Update() en el campo específico — por ejemplo FieldToc.Update() — para recalcular su resultado, o a FieldToc.UpdatePageNumbers() cuando solo se necesita actualizar la parte del número de página. Para actualizar todos los campos de un documento a la vez en lugar de uno por uno, llame a Document.UpdateFields(). Recuerde que los números de página en los resultados de estos campos se evalúan como valores de marcador de posición en esta edición, ya que el diseño de página y la paginación no forman parte de ella.
Paso 6: Incluir entradas de otros documentos
Inserte un FieldRD para que una tabla de contenido, índice o tabla de autoridades extraiga entradas de otro archivo al compilar. FieldRD.FileName nombra el documento referenciado, y IsPathRelative controla si esa ruta se resuelve de forma relativa al documento actual. Añada un FieldRD por cada documento adicional y actualice el campo de compilación posteriormente para que el resultado combinado incluya el contenido referenciado.
Problemas comunes y soluciones
Una tabla de contenidos no incluye los encabezados esperados. La cadena de conmutación del TOC (o HeadingLevelRange) excluye esos niveles de esquema. Ajuste los conmutadores pasados a InsertTableOfContents, o establezca FieldToc.HeadingLevelRange directamente.
Una entrada de índice no aparece donde se esperaba. El correspondiente FieldXE marcador falta, o su EntryType la sintaxis de subnivel no coincide con lo que FieldIndex espera. Confirma el FieldXE los marcadores existen y sus EntryType valores están formateados de manera consistente.
Los resultados del campo aparecen obsoletos después de editar el contenido. El campo no se actualizó después de la edición. Llama Update() al campo específico, o Document.UpdateFields() para refrescar todos los campos a la vez.
Las entradas de otro documento no se incluyen al compilar. No FieldRD haciendo referencia a que el documento existe, o IsPathRelative no coincide con cómo debería resolverse la ruta. Añade un FieldRD con el correcto FileName and IsPathRelative configuración.
Preguntas frecuentes
¿Cómo inserto una tabla de contenidos programáticamente?
Llame a DocumentBuilder.InsertTableOfContents(switches) con una cadena de conmutadores al estilo de Word, como "\o \"1-3\" \h \z \u", en la posición donde debe aparecer la TOC.
¿Cómo marco texto como una entrada de índice?
Inserte un campo FieldXE en esa ubicación con su propiedad Text establecida al texto de la entrada; FieldIndex compila todos los marcadores FieldXE del documento en el resultado del índice.
¿Cuál es la diferencia entre FieldTC y una entrada de TOC basada en encabezados?
El comportamiento predeterminado de la TOC de Word recopila entradas de los párrafos que usan estilos de encabezado. FieldTC marca una ubicación arbitraria como una entrada de TOC independiente del estilo de párrafo, que FieldToc puede incluir mediante la coincidencia de los valores EntryIdentifier/TypeIdentifier.
¿Cómo actualizo una TOC o un índice después de que el documento cambie?
Llame a Update() sobre el campo específico (o UpdatePageNumbers() en un FieldToc solo para números de página), o Document.UpdateFields() para actualizar todos los campos del documento.
¿Se puede compilar un TOC o índice a través de varios documentos?
Sí — inserte un FieldRD que apunte a cada documento adicional mediante FileName. El campo de compilación (FieldToc, FieldIndex o FieldToa) incluye entradas de los documentos referenciados una vez que se actualiza.