Práce se seznamy
Práce se seznamy
Tento průvodce ukazuje, jak jsou číslované a odrážkové seznamy reprezentovány a řízeny v Aspose.Words FOSS pro .NET. List je opakovatelná definice seznamu sdílená každým odstavcem, který ji používá, ListFormat je způsob, jakým se jednotlivý odstavec odkazuje na seznam a jeho aktuální úroveň, a ListLevel obsahuje skutečné číslování nebo formátování odrážek pro jednu úroveň seznamu.
Objekt seznamu a ListCollection
List představuje jednu definici seznamu — pravidla číslování, která může dokument použít pro mnoho odstavců. List.ListId ji identifikuje, List.IsMultiLevel uvádí, zda definuje více než jednu úroveň, a List.ListLevels vrací ListLevelCollection obsahující jeden ListLevel pro každou úroveň, kterou seznam definuje. List.IsListStyleDefinition a IsListStyleReference rozlišují seznam, který definuje vlastní formátování, od toho, který odkazuje na formátování pomocí propojeného Style (dostupného přes List.Style). Seznamy každého dokumentu jsou přístupné přes Document.Lists, který vrací ListCollection: ListCollection.Add(listTemplate) vytvoří nový seznam z jednoho z předdefinovaných formátů ListTemplate ve Wordu, Add(listStyle) vytvoří jeden z Style, AddSingleLevelList(listTemplate) vytvoří jednorozměrnou variantu a AddCopy(srcList) duplikuje existující seznam — užitečné, když chcete, aby odstavce měly nezávislé číslování (čerstvé restartování) místo sdílení stejného čítače. ListCollection.GetListByListId(listId) načte konkrétní seznam a Count uvádí, kolik seznamů dokument obsahuje.
Použití seznamů v odstavcích pomocí ListFormat
ListFormat, dosažený z formátování odstavce, řídí, do jakého seznamu odstavec patří a na jaké úrovni. ListFormat.List je List, který odstavec používá, a ListFormat.ListLevelNumber je nulová úroveň v rámci tohoto seznamu; IsListItem uvádí, zda je odstavec vůbec součástí seznamu. ApplyBulletDefault() a ApplyNumberDefault() aplikují výchozí odrážkový nebo číslovaný formát seznamu ve Wordu na odstavec jedním voláním, RemoveNumbers() odstraňuje formátování seznamu a ListIndent()/ListOutdent() posouvají odstavec hlouběji do úrovní seznamu nebo výše — stejné operace, které Word provádí při stisknutí Tab nebo Shift+Tab na začátku odstavce seznamu.
Úrovně seznamu a styl číslování
ListLevel obsahuje formátování pro jednu úroveň seznamu: NumberStyle (hodnota výčtu NumberStyle, například arabské číslice nebo římské číslice), NumberFormat (formátovací řetězec, který kombinuje číslo s doslovným textem, jako tečka nebo závorka), StartAt (počáteční číslo) a RestartAfterLevel (která vyšší úroveň restartuje čítač této úrovně). Alignment (hodnota ListLevelAlignment: Left, Center, Right) a TrailingCharacter (hodnota ListTrailingCharacter: Tab, Space, Nothing) řídí, jak je štítek umístěn a oddělen od textu odstavce, spolu s TabPosition, NumberPosition a TextPosition pro přesné rozvržení. IsLegal vynutí číslování ve stylu právnických dokumentů (vždy arabské, bez ohledu na NumberStyle) a LinkedStyle spojuje úroveň s odstavcem Style. Pro obrázkové odrážky CreatePictureBullet() a DeletePictureBullet() spravují obrázek odrážky ImageData, a ListLevel.Font nastavuje formátování samotného čísla nebo znaku odrážky. ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat) vypočítá skutečnou hodnotu štítku na dané pozici v sekvenci číslování.
Štítky seznamů a předdefinované šablony
ListLabel popisuje vykreslený štítek pro konkrétní instanci položky seznamu — LabelString je doslovný text, který Word zobrazuje (např. „3.“ nebo „•“), LabelValue je základní číselná hodnota a Font je formátování štítku. ListTemplate je výčet předdefinovaných formátů seznamů ve Wordu (styly odrážek jako BulletDefault, BulletDisk, BulletCircle, BulletSquare, BulletDiamonds a číslované formáty), používaný s ListCollection.Add(listTemplate) pro zahájení od vestavěného formátu místo sestavování vlastnosti po vlastnosti.
Tipy a osvědčené postupy
- Použijte
ListCollection.AddCopy(srcList), když nová skupina odstavců vyžaduje číslování seznamu, které se začíná znovu nezávisle, místo opětovného použitíList, která je již připojena k jiným odstavcům. - Upřednostněte
ListFormat.ApplyNumberDefault()/ApplyBulletDefault()pro standardní seznamy místo ručního nastavování každé vlastnostiListLevel. - Zkontrolujte
List.IsListStyleReferenceversusIsListStyleDefinitionpřed přímou úpravou formátování seznamu — formátování seznamu odkazujícího se na styl může být místo toho řízeno jeho propojenýmStyle. - Nastavte
RestartAfterLevelexplicitně u vnořených seznamů místo spoléhání se na výchozí chování restartu, když číslování musí být resetováno na konkrétních úrovních osnovy. - Použijte
ListFormat.ListIndent()/ListOutdent()k přesunu odstavce mezi úrovněmi seznamu místo přímého nastaveníListLevelNumber, protože tyto metody udržují formátování seznamu odstavce interně konzistentní.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Dva odstavce, které by měly být číslovány samostatně, pokračují ve stejném pořadí. | Obě odstavce mají ListFormat.List, který odkazuje na stejný sdílený objekt List. | Dejte druhému odstavci jeho vlastní seznam pomocí ListCollection.AddCopy(srcList) místo opětovného použití stejného List. |
| Vlastní řetězec formátu číslování se nezobrazuje podle očekávání. | ListLevel.NumberFormat neodpovídá očekávanému vzoru pro NumberStyle úrovně. | Ověřte, že NumberFormat a NumberStyle jsou nastaveny konzistentně pro upravovanou úroveň |
| Odsazení seznamu vypadá špatně po programové změně úrovní | ListLevelNumber byl nastaven přímo, aniž by byly aktualizovány související vlastnosti pozice | Použijte ListFormat.ListIndent()/ListOutdent() místo přímého nastavení ListLevelNumber |
| Obrázkový odrážkový znak se nezobrazuje | Pro úroveň nebyl vytvořen žádný obrázkový odrážkový znak, nebo je stále aktivní výchozí formátování textové odrážky | Zavolejte ListLevel.CreatePictureBullet() a před odebráním formátování textové odrážky poskytněte data obrázku |
FAQ
Jaký je rozdíl mezi List a ListFormat?
List je znovupoužitelná definice číslování/odrážky sdílená mezi odstavci; ListFormat je na úrovni odstavce — ukazuje, které List konkrétní odstavec používá a na jaké úrovni, pomocí ListFormat.List a ListLevelNumber.
Jak zjistit, zda je odstavec součástí seznamu?
Přečtěte si ListFormat.IsListItem o formátování odstavce; pokud true, ListFormat.List a ListLevelNumber popisují, ke kterému seznamu a úrovni patří.
Jak vytvořit nový seznam, který začne číslovat od 1 nezávisle na existujícím seznamu?
Použijte ListCollection.AddCopy(srcList) k vytvoření nezávislé kopie definice seznamu, pak tuto kopii použijte na nové odstavce — místo opětovného použití původního List, který by pokračoval ve stejném číslování.
Jak vytvořit odrážkový nebo číslovaný seznam od začátku?
Použijte ListFormat.ApplyBulletDefault() nebo ApplyNumberDefault() pro výchozí formátování ve Wordu, nebo ListCollection.Add(listTemplate) s hodnotou ListTemplate, abyste vycházeli z jednoho z předdefinovaných formátů Wordu a přizpůsobili tak vzniklý List.ListLevels.
Jak mohu ovládat formát číslování, například “1)” místo “1.”?
Nastavte ListLevel.NumberFormat na příslušné úrovni na požadovaný řetězec formátu, spolu s NumberStyle pro samotný styl čísla.
API Reference Shrnutí
| Třída/metoda | Popis: |
|---|---|
List | Opakovatelná definice seznamu (číslování/odrážky) |
ListCollection | Kolekce všech seznamů v dokumentu |
ListCollection.Add(listTemplate) / AddCopy(srcList) | Vytvořte seznam z předdefinované šablony nebo zkopírujte existující. |
ListFormat | Odkaz na List pro každý odstavec a aktuální úroveň |
ListFormat.ApplyBulletDefault() / ApplyNumberDefault() | Použijte výchozí formátování odrážek nebo číslování na odstavec |
ListLevel | Formátování číslování/odrážek pro jednu úroveň List |
ListLevel.NumberStyle / NumberFormat | Číselný styl a formátovací řetězec pro úroveň |
ListLabel | Vykreslený popisek (text a hodnota) pro konkrétní položku seznamu |
ListTemplate | Výčet předdefinovaných formátů seznamů ve Wordu |