Arbeta med stilar
Arbeta med formatmallar
Den här guiden visar hur man arbetar med stycke-, tecken-, tabell- och liststilar i Aspose.Words FOSS för .NET — att söka upp och tillämpa inbyggda och anpassade stilar samt konfigurera regionsspecifik villkorsstyrd formatering på tabellstilar.
Ett Style-objekt representerar en enskild inbyggd eller användardefinierad formatmall — den namngivna samlingen av stycke-, teckensnitt- och listformatering som Word använder när ett stycke eller en körning tilldelas den formatmallen. Varje dokument exponerar sina formatmallar via egenskapen Document.Styles, som returnerar en StyleCollection. Tabellformatmallar representeras av TableStyle, en underklass till Style som lägger till tabellspecifik formatering och regionsspecifik villkorsstyrd formatering via ConditionalStyleCollection.
Formatmalltyper och identifiering
Varje Style har en Type-egenskap av typen StyleType, som är en av Paragraph, Character, Table eller List — vilket motsvarar de fyra typerna av formatmallar som Word stöder. Inbyggda formatmallar har även ett språkoberoende StyleIdentifier-enumvärde (till exempel värden som motsvarar rubriker, betoning och hyperlänksformatmallar) så att kod kan slå upp en inbyggd formatmall utan att vara beroende av dess visningsnamn på ett specifikt språk. En formatmalls mänskligt läsbara namn är tillgängligt via Style.Name, och Style.Aliases returnerar eventuella alternativa namn som Word känner igen för samma formatmall. Style.BuiltIn rapporterar om formatmallen levereras med själva Word jämfört med att den definieras i dokumentet, och Style.IsHeading rapporterar om formatmallen är en av de inbyggda rubrikformatmallarna.
Åtkomst till och hantering av formatmallssamlingen
StyleCollection är samlingen av alla Style-objekt — inbyggda och anpassade — som är knutna till ett dokument, nås via Document.Styles. Hämta en formatmall med dess visningsnamn med hjälp av indexeraren StyleCollection — styles[name] — eller hämta en inbyggd formatmall med dess språkoberoende StyleIdentifier med samma indexerare — styles[sti] — vilket är mer pålitligt än namnuppslagning över dokument som skapats på olika språk. Nya formatmallar skapas med StyleCollection.Add(type, name), där man anger StyleType och ett namn, och en befintlig formatmall kan dupliceras in i samlingen med StyleCollection.AddCopy(style). StyleCollection.Count rapporterar hur många formatmallar dokumentet innehåller, och samlingen exponerar också DefaultFont och DefaultParagraphFormat, som beskriver den dokumentomfattande standardformateringen som nytt innehåll ärver innan någon explicit formatmall tillämpas. StyleCollection.ClearQuickStyleGallery() tar bort alla formatmallar från Word UI:s snabbformatgalleri utan att radera själva formatmallarna.
Applicera formatmallar på stycken och körningar
Formateringsobjekt som kan bära en formatmall exponerar både en Style-egenskap (själva Style-objektet) och en StyleName-egenskap (en genväg som löser upp eller skapar en formatmall efter namn). ParagraphFormat.Style och ParagraphFormat.StyleName tillämpar en styckeformatmall, medan Font.Style och Font.StyleName tillämpar en teckenformatmall på ett körningsformat. En formatmalls egna LinkedStyleName, BaseStyleName och NextParagraphStyleName egenskaper beskriver hur den förhåller sig till andra formatmallar: BaseStyleName anger den formatmall som den ärver odefinierad formatering från, LinkedStyleName anger en parade stycke-/teckenformatmall (som Word gör för inbyggda formatmallar som Rubrik 1 och dess länkade teckenformatmall), och NextParagraphStyleName anger den formatmall som Word tilldelar ett nytt stycke som skrivs efter ett som använder denna formatmall.
Tabellformatmallar och villkorsstyrd formatering
TableStyle utökar Style med tabell-layout-egenskaper såsom Alignment, CellSpacing, LeftIndent, Shading, VerticalAlignment och marginaler (LeftPadding, RightPadding, TopPadding, BottomPadding), samt RowStripe och ColumnStripe, vilka styr hur många rader eller kolumner ett bandningsmönster upprepas över. Utöver enhetlig tabellformatering returnerar TableStyle.ConditionalStyles en ConditionalStyleCollection som innehåller en ConditionalStyle per tabellregion — FirstRow, LastRow, FirstColumn, LastColumn, OddRowBanding, EvenRowBanding, OddColumnBanding, EvenColumnBanding och de fyra hörncellerna (TopLeftCell, TopRightCell, BottomLeftCell, BottomRightCell). Varje ConditionalStyle har sina egna Font, ParagraphFormat, Shading, Borders och cellmarginal, och dess Type-egenskap rapporterar vilken ConditionalStyleType-region den representerar. ConditionalStyle.ClearFormatting() och ConditionalStyleCollection.ClearFormatting() återställer formatering för en region eller hela uppsättningen av villkorliga regioner.
Metadata för formatmallar och beteendeflaggor
Några boolska och numeriska egenskaper på Style styr hur Word hanterar en formatmall i sitt användargränssnitt snarare än hur den renderas: Locked förhindrar att formatmallen ändras när formateringsskydd är aktivt, IsQuickStyle styr om den visas i snabbformatgalleriet, AutomaticallyUpdate får formatmallen att omdefiniera sig själv från manuellt applicerad direktformatering, SemiHidden och UnhideWhenUsed styr synlighet i formatmallistan före och efter första användning, och Priority påverkar sorteringsordningen i galleriet. En formatmall exponerar också List och ListFormat egenskaper när den definierar listnumrering, och Style.Remove() tar bort formatmallen från dess StyleCollection.
Tips och bästa praxis
- Föredra
StyleCollection-indexeraren med ettStyleIdentifier-värde framför att söka upp efter namn när du letar efter en inbyggd formatmall — namn är lokalanpassade, menStyleIdentifier-värden är det inte. - Ställ in
BaseStyleNameför att bygga stilhierarkier (till exempel en uppsättning rubrikstilar som alla ärver teckensnittval från en basstil) istället för att repetera formatering på varje stil. - När du kopierar en stil mellan dokument, använd
StyleCollection.AddCopy(style)istället för att manuellt läsa av och återapplicera varje formateringsattribut. - Konfigurera
TableStyle.ConditionalStyles-regioner för bandade tabeller istället för att manuellt formatera alternerande rader i kod — varjeConditionalStyles regions formatering tillämpas baserat på dessConditionalStyleType, snarare än genom att sätta direkt formatering på enskilda rader. - Kontrollera
Style.BuiltIninnan du tar bort eller byter namn på en stil programatiskt; inbyggda stilar refereras vanligtvis till med namn på andra ställen i dokumentet.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
StyleCollection indexer returnerar null för en namnuppslagning | Stilnamnet finns inte i detta dokument, eller så har en inbyggd stil ännu inte använts så Word har inte materialiserat den | Kontrollera Style.Aliases för alternativa namn, eller använd StyleCollection indexer med en StyleIdentifier för inbyggda stilar istället |
Att sätta StyleName skapar oväntat en ny stil | StyleName skapar den namngivna stilen om den inte redan finns i samlingen | Använd StyleCollection indexer först för att bekräfta att stilen finns, eller tilldela Style-objektet direkt via Style-egenskapen |
Tabellbandning visas inte efter att ha applicerat en TableStyle | De villkorsstyrda formateringsregionerna (OddRowBanding, EvenRowBanding osv.) konfigurerades aldrig på TableStyle.ConditionalStyles | Ställ in formatering på de relevanta ConditionalStyle-posterna i ConditionalStyleCollection |
| En stiländring påverkar inte innehåll som redan använder stilen | Direkt (manuell) formatering tillämpades ovanpå stilen och har företräde | Rensa direkt formatering på de berörda körningarna/avsnitten, eller ange Style.AutomaticallyUpdate |
FAQ
Hur får jag samlingen av alla stilar i ett dokument?
Läs Document.Styles, som returnerar en StyleCollection som innehåller alla inbyggda och användardefinierade Style i det dokumentet.
Vad är skillnaden mellan Style och StyleIdentifier?
Style är det faktiska stilobjektet med dess formatering; StyleIdentifier är ett localesoberoende enum-värde som används för att slå upp en specifik inbyggd stil oavsett dokumentets språk, via StyleCollection indexeraren.
Hur skiljer sig tabellstilar från stycke- eller teckenstilar?
TableStyle är en subklass av Style som lägger till tabell-layout-egenskaper (Alignment, CellSpacing, padding) och en ConditionalStyles samling för regionsspecifik formatering såsom bandade rader, rubrikrader och hörnceller — formateringskoncept som inte gäller för stycke- eller teckenstilar.
Kan jag skapa en helt ny stil istället för att ändra en befintlig?
Ja — anropa StyleCollection.Add(type, name) med önskad StyleType och ett nytt namn för att skapa en tom stil, och sätt sedan dess formaterings-egenskaper (Font, ParagraphFormat och så vidare för paragraph/character styles).
Hur duplicerar jag en stil, inklusive från ett annat dokument?
Använd StyleCollection.AddCopy(style), skicka ett Style-objekt (som kan komma från en annan Documents StyleCollection) för att lägga till en kopia av det i mål-samlingen.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Style | En enskild inbyggd eller användardefinierad stycke-, tecken-, tabell- eller liststil |
StyleCollection | Samlingen av alla stilar i ett dokument, nås via Document.Styles |
StyleCollection indexer efter namn | Sök upp en stil efter dess visningsnamn, t.ex. styles["Heading 1"] |
StyleCollection indexer efter identifierare | Sök upp en inbyggd stil efter en localesoberoende identifierare, t.ex. styles[StyleIdentifier.Heading1] |
StyleCollection.Add(type, name) | Skapa en ny, tom stil av den givna StyleType |
StyleCollection.AddCopy(style) | Kopiera en befintlig stil till denna samling |
StyleType | Enum som särskiljer Paragraph, Character, Table och List stilar |
StyleIdentifier | Lokaloberoende identifierare för en inbyggd stil |
TableStyle | En Style underklass för tabellformatering, inklusive villkorlig per-region-styling |
ConditionalStyleCollection | Mängden per-region ConditionalStyle-poster på en TableStyle |
ConditionalStyle | Formatering (font, styckeformat, skuggning, kanter, utfyllnad) för en tabellregion |
ConditionalStyleType | Enum som identifierar vilken tabellregion en ConditionalStyle gäller för |