Come lavorare con l'indice e le tabelle di Word in .NET
Come lavorare con l’indice e le tabelle di Word in .NET
Questa guida mostra come inserire e costruire le strutture di riferimento basate su campi che i documenti Word usano per riassumere il proprio contenuto — un indice, un indice alfabetico e un indice delle autorità — con Aspose.Words FOSS per .NET. Ognuna è compilata da campi marcatore presenti altrove nel documento: FieldToc compila le voci basate su intestazioni e contrassegnate FieldTC, FieldIndex compila i marcatori FieldXE, e FieldToa compila le citazioni FieldTA. Ogni classe di campo in questa famiglia deriva dal tipo base Field nello spazio dei nomi Aspose.Words.Fields.
Guida passo-passo
Passo 1: Inserire un indice
Chiama DocumentBuilder.InsertTableOfContents(switches) nella posizione in cui dovrebbe comparire l’indice, passando una stringa di switch di campo in stile Word — ad esempio "\o \"1-3\" \h \z \u" — per controllare quali livelli di intestazione sono inclusi e come è formattato il risultato, gli stessi switch che Word scrive quando un indice viene inserito tramite la sua interfaccia. Questo inserisce un FieldToc, che espone anche la stessa struttura direttamente come proprietà: HeadingLevelRange/EntryLevelRange per i livelli di struttura inclusi, InsertHyperlinks, PreserveTabs/PreserveLineBreaks e BookmarkName. Per una tabella delle figure invece di un indice, imposta TableOfFiguresLabel o CaptionlessTableOfFiguresLabel sullo stesso FieldToc.
Passo 2: Contrassegnare voci personalizzate dell’indice
Non tutte le voci che un indice dovrebbe includere provengono da uno stile di intestazione. Inserisci un FieldTC in una posizione specifica per marcarla come voce di indice indipendente dallo stile di paragrafo: FieldTC.Text è il testo della voce, EntryLevel è il livello di struttura in cui dovrebbe apparire, e OmitPageNumber sopprime il numero di pagina per quella voce. Quando un documento necessita di più di un indice — ad esempio un indice principale e una tabella delle figure separata — imposta FieldTC.TypeIdentifier in modo che corrisponda al EntryIdentifier del FieldToc che dovrebbe raccoglierlo.
Passo 3: Crea un indice dalle voci contrassegnate
Contrassegna ogni posizione che deve apparire nell’indice con un FieldXE, impostando Text sul testo della voce; EntryType raggruppa le voci in sotto-livelli usando una sintassi separata da due punti, e PageRangeBookmarkName segna un segnalibro la cui estensione diventa un intervallo di pagine nell’indice anziché un singolo numero di pagina. FieldIndex compila tutti i marcatori FieldXE nel documento nel risultato alfabetico — imposta Heading per inserire separatori di intestazione per lettera (A, B, C…), LetterRange per limitare l’indice a una parte dell’alfabeto, e RunSubentriesOnSameLine per controllare il layout delle sotto-voci. PageNumberSeparator, PageRangeSeparator, SequenceSeparator e CrossReferenceSeparator controllano la punteggiatura tra una voce e il suo riferimento di pagina. Gli stili visuali dell’indice integrati in Word sono disponibili come enum FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Passo 4: Crea una tabella delle autorità dalle citazioni
Contrassegna ogni citazione nel testo con un FieldTA: LongCitation e ShortCitation contengono il testo della citazione, EntryCategory la raggruppa sotto un’intestazione come “Casi” o “Statuti”, e IsBold/IsItalic ne controllano la formattazione. FieldToa compila quelle citazioni in una tabella — EntryCategory seleziona quale categoria compilare, UseHeading controlla se le intestazioni di categoria appaiono, UsePassim applica la convenzione “passim” per le fonti citate molte volte, e PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting controllano il layout.
Passo 5: Aggiorna i campi dopo le modifiche al documento
Un indice, un indice analitico o una tabella delle autorità non si aggiornano da soli quando il contenuto circostante cambia. Richiama Update() sul campo specifico — ad esempio FieldToc.Update() — per ricalcolare il suo risultato, o FieldToc.UpdatePageNumbers() quando è necessario aggiornare solo la parte del numero di pagina. Per aggiornare tutti i campi di un documento in una volta sola anziché uno per volta, richiama Document.UpdateFields(). Ricorda che i numeri di pagina nei risultati di questi campi sono valutati come valori segnaposto in questa edizione, poiché il layout e l’impaginazione non ne fanno parte.
Passo 6: Includi voci da altri documenti
Inserisci un FieldRD per far sì che un TOC, indice o tavola delle autorità importi voci da un altro file al momento della compilazione. FieldRD.FileName denomina il documento di riferimento, e IsPathRelative controlla se quel percorso viene risolto in modo relativo al documento corrente. Aggiungi un FieldRD per ogni documento aggiuntivo e aggiorna il campo di compilazione in seguito affinché il risultato combinato includa il contenuto di riferimento.
Problemi comuni e soluzioni
Un indice non include le intestazioni previste. La stringa di switch del TOC (o HeadingLevelRange) esclude quei livelli di outline. Regola gli switch passati a InsertTableOfContents, o imposta FieldToc.HeadingLevelRange direttamente.
Una voce di indice non appare dove previsto. Il corrispondente FieldXE marcatore è mancante, o il suo EntryType la sintassi di livello inferiore non corrisponde a quello che FieldIndex si aspetta. Conferma il FieldXE se i marcatori esistono e il loro EntryType valori sono formattati in modo coerente.
I risultati del campo sembrano obsoleti dopo la modifica del contenuto. Il campo non è stato aggiornato dopo la modifica. Chiama Update() sul campo specifico, oppure Document.UpdateFields() per aggiornare tutti i campi contemporaneamente.
Le voci da un altro documento non sono incluse durante la compilazione. No FieldRD il riferimento a quel documento esiste, o IsPathRelative non corrisponde a come il percorso dovrebbe essere risolto. Aggiungi un FieldRD con il corretto FileName and IsPathRelative impostazione.
Domande frequenti
Come inserisco un indice programmaticamente?
Chiama DocumentBuilder.InsertTableOfContents(switches) con una stringa di interruttori in stile Word, come "\o \"1-3\" \h \z \u", nella posizione in cui dovrebbe apparire l’indice.
Come segno il testo come voce di indice?
Inserisci un campo FieldXE in quella posizione con la sua proprietà Text impostata al testo della voce; FieldIndex compila tutti i marcatori FieldXE nel documento nel risultato dell’indice.
Qual è la differenza tra FieldTC e una voce di indice basata su intestazione?
Il comportamento predefinito dell’indice in Word raccoglie le voci dai paragrafi usando gli stili di intestazione. FieldTC segna una posizione arbitraria come voce di indice indipendente dallo stile del paragrafo, che FieldToc può includere tramite la corrispondenza dei valori EntryIdentifier/TypeIdentifier.
Come aggiorno un indice o un indice analitico dopo le modifiche al documento?
Chiama Update() sul campo specifico (o UpdatePageNumbers() su un FieldToc solo per i numeri di pagina), oppure Document.UpdateFields() per aggiornare tutti i campi nel documento.
È possibile compilare un TOC o un indice su più documenti?
Sì — inserisci un FieldRD che punti a ciascun documento aggiuntivo tramite FileName. Il campo di compilazione (FieldToc, FieldIndex o FieldToa) include le voci dei documenti di riferimento una volta aggiornato.