Hur man arbetar med Word-index och tabeller i .NET
Hur man arbetar med Word-index och tabeller i .NET
Den här guiden visar hur man infogar och bygger de fältstyrda referensstrukturer som Word-dokument använder för att sammanfatta sitt eget innehåll — en innehållsförteckning, ett alfabetiskt index och en författarlista — med Aspose.Words FOSS för .NET. Var och en sammanställs från markörfält någon annanstans i dokumentet: FieldToc samlar in rubrikbaserade och FieldTC-markerade poster, FieldIndex samlar FieldXE-markörer, och FieldToa samlar FieldTA citat. Varje fältklass i denna familj ärver från bastypen Field i Aspose.Words.Fields-namnutrymmet.
Steg-för-steg guide
Steg 1: Infoga en innehållsförteckning
Anropa DocumentBuilder.InsertTableOfContents(switches) på den position där innehållsförteckningen ska visas, och skicka en fältväxlingssträng i Word-stil — till exempel "\o \"1-3\" \h \z \u" — för att styra vilka rubriknivåer som inkluderas och hur resultatet formateras, samma växlingar som Word använder när en innehållsförteckning infogas via dess UI. Detta infogar en FieldToc, som också exponerar samma struktur direkt som egenskaper: HeadingLevelRange/EntryLevelRange för inkluderade dispositionsnivåer, InsertHyperlinks, PreserveTabs/PreserveLineBreaks och BookmarkName. För en figurtabell istället för en innehållsförteckning, sätt TableOfFiguresLabel eller CaptionlessTableOfFiguresLabel på samma FieldToc.
Steg 2: Markera anpassade poster i innehållsförteckningen
Det är inte varje post som en TOC bör innehålla som kommer från en rubrikstil. Infoga en FieldTC på en specifik plats för att markera den som en TOC-post oberoende av styckeformat: FieldTC.Text är posttexten, EntryLevel är den dispositionsnivå den ska visas på, och OmitPageNumber undertrycker sidnumret för den posten. När ett dokument behöver mer än en TOC — till exempel en huvud-TOC och en separat figurförteckning — sätt FieldTC.TypeIdentifier så att den matchar EntryIdentifier för den FieldToc som ska samla den.
Steg 3: Bygg ett index från markerade poster
Markera varje plats som ska ingå i indexet med en FieldXE, och sätt Text till posttexten; EntryType grupperar poster i undernivåer med kolonseparerad syntax, och PageRangeBookmarkName markerar ett bokmärke vars omfång blir ett sidintervall i indexet snarare än ett enstaka sidnummer. FieldIndex samlar alla FieldXE-markörer i dokumentet till det alfabetiska resultatet — sätt Heading för att infoga bokstavs-rubrikavgränsare (A, B, C…), LetterRange för att begränsa indexet till en del av alfabetet, och RunSubentriesOnSameLine för att styra layouten för underposter. PageNumberSeparator, PageRangeSeparator, SequenceSeparator och CrossReferenceSeparator styr skiljetecknet mellan en post och dess sidreferens. Words inbyggda visuella indexstilar finns tillgängliga som FieldIndexFormat-enumerationen (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).
Steg 4: Bygg en Table of Authorities från citat
Markera varje citat i texten med en FieldTA: LongCitation och ShortCitation innehåller citattexten, EntryCategory grupperar det under en rubrik såsom “Cases” eller “Statutes”, och IsBold/IsItalic styr dess formatering. FieldToa samlar dessa citat i en tabell — EntryCategory väljer vilken kategori som ska sammanställas, UseHeading styr om kategorirubriker visas, UsePassim tillämpar “passim”-konventionen för källor som citeras många gånger, och PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting styr layouten.
Steg 5: Uppdatera fält efter att dokumentet har ändrats
En TOC, ett index eller en table of authorities uppdateras inte automatiskt när omgivande innehåll ändras. Anropa Update() på det specifika fältet — till exempel FieldToc.Update() — för att beräkna om dess resultat, eller FieldToc.UpdatePageNumbers() när endast sidnummerdelen behöver uppdateras. För att uppdatera alla fält i ett dokument på en gång istället för ett i taget, anropa Document.UpdateFields(). Kom ihåg att sidnummer i resultat från dessa fält utvärderas till platshållarvärden i denna utgåva, eftersom sidlayout och paginering inte ingår.
Steg 6: Inkludera poster från andra dokument
Infoga en FieldRD för att låta en TOC, ett index eller en tabell över myndigheter hämta poster från en annan fil när den kompileras. FieldRD.FileName namnger det refererade dokumentet, och IsPathRelative styr om den sökvägen löses relativt till det aktuella dokumentet. Lägg till en FieldRD per ytterligare dokument och uppdatera kompileringsfältet efteråt så att det kombinerade resultatet inkluderar det refererade innehållet.
Vanliga problem och lösningar
En innehållsförteckning inkluderar inte förväntade rubriker. TOC:ns växlingssträng (eller HeadingLevelRange) exkluderar de nivåerna i strukturen. Justera växlarna som skickas till InsertTableOfContents, eller ange FieldToc.HeadingLevelRange direkt.
En indexpost visas inte där den förväntas. Den motsvarande FieldXE markören saknas, eller dess EntryType undernivåsyntax matchar inte vad FieldIndex förväntar. FieldXE markörer finns och deras EntryType värden är formaterade konsekvent.
Fältresultaten ser föråldrade ut efter redigering av innehåll. Fältet uppdaterades inte efter redigeringen. Anropa Update() på det specifika fältet, eller Document.UpdateFields() för att uppdatera alla fält på en gång.
Poster från ett annat dokument inkluderas inte vid kompilering. Nej FieldRD referenser till det dokumentet finns, eller IsPathRelative matchar inte hur sökvägen bör lösas. Lägg till en FieldRD med den korrekta FileName and IsPathRelative inställningen.
Vanliga frågor
Hur infogar jag en innehållsförteckning programatiskt?
Anropa DocumentBuilder.InsertTableOfContents(switches) med en Word-liknande switch-sträng, till exempel "\o \"1-3\" \h \z \u", på den plats där innehållsförteckningen ska visas.
Hur markerar jag text som en indexpost?
Infoga ett FieldXE-fält på den platsen med dess Text-egenskap satt till posttexten; FieldIndex samlar alla FieldXE-markörer i dokumentet till indexresultatet.
Vad är skillnaden mellan FieldTC och en rubrikbaserad innehållsförteckningspost?
Word:s standardbeteende för innehållsförteckning samlar poster från stycken med rubrikstilar. FieldTC markerar en godtycklig plats som en innehållsförteckningspost oberoende av styckestil, vilket FieldToc kan inkludera genom att matcha EntryIdentifier/TypeIdentifier-värden.
Hur uppdaterar jag en innehållsförteckning eller ett index efter att dokumentet har ändrats?
Anropa Update() på det specifika fältet (eller UpdatePageNumbers() på en FieldToc för endast sidnummer), eller Document.UpdateFields() för att uppdatera alla fält i dokumentet.
Kan en TOC eller ett index kompileras över flera dokument?
Ja — infoga en FieldRD som pekar på varje ytterligare dokument via FileName. Samlingsfältet (FieldToc, FieldIndex eller FieldToa) inkluderar poster från refererade dokument när det har uppdaterats.