Jak pracovat se seznamy v .NET

Jak pracovat se seznamy v .NET

Jak pracovat se seznamy v .NET

Číslované a odrážkové seznamy v dokumentu Word jsou postaveny na třech spolupracujících objektech: List, opakovatelná definice číslování; ListFormat, který určuje konkrétnímu odstavci, ke kterému seznamu a úrovni patří; a ListLevel, který obsahuje skutečné formátování pro jednu úroveň. Tento průvodce ukazuje, jak použít seznam na odstavec, zabránit sdílení čítače mezi samostatnými seznamy, přesouvat odstavce mezi úrovněmi a přizpůsobit číslování a formátování odrážek pomocí Aspose.Words FOSS pro .NET.


Průvodce krok za krokem

Krok 1: Použít seznam na odstavec

Použijte ListFormat.ApplyBulletDefault() nebo ApplyNumberDefault() na formátování odstavce k aplikaci výchozího odrážkového nebo číslovaného seznamu ve Wordu jedním voláním — to je nejrychlejší způsob, jak použít standardní seznam. Pro konkrétní předdefinovaný formát místo výchozího zavolejte Document.Lists (a ListCollection) .Add(listTemplate) s hodnotou ListTemplate, například BulletDisk, BulletSquare, NumberArabicDot nebo NumberUppercaseRomanDot, abyste vytvořili List z jednoho z vestavěných formátů ve Wordu, nebo AddSingleLevelList(listTemplate) pro variantu s jednou úrovní. Jakmile má odstavec formátování seznamu, ListFormat.IsListItem hlásí true a ListFormat.List/ListLevelNumber identifikují, který seznam a úroveň používá.


Krok 2: Přidělit nové skupině odstavců samostatné číslování

Odstavce, jejichž ListFormat.List ukazuje na stejný sdílený objekt List, pokračují ve stejném číslování. Když nová skupina odstavců potřebuje číslování, které se nezávisle restartuje od 1, zavolejte ListCollection.AddCopy(srcList) k duplikaci existující definice seznamu a poté použijte kopii na nové odstavce místo opětovného použití originálu. ListCollection.GetListByListId(listId) načte konkrétní seznam podle jeho ListId, když jej potřebujete najít místo vytvoření nového, a Count udává, kolik seznamů dokument aktuálně obsahuje.


Krok 3: Přesunout odstavec mezi úrovněmi seznamu

Použijte ListFormat.ListIndent() k přesunu odstavce o jednu úroveň hlouběji v jeho seznamu a ListOutdent() k přesunu o jednu úroveň výše — stejné operace, které Word provádí pomocí Tab a Shift+Tab na začátku odstavce seznamu. Upřednostněte tyto metody před přímým nastavením ListLevelNumber, protože zachovávají interní konzistenci formátování seznamu odstavce. Zavolejte RemoveNumbers() k úplnému odebrání formátování seznamu z odstavce.


Krok 4: Přizpůsobit formát číslování úrovně seznamu

Cílovou úroveň získáte pomocí List.ListLevels (jedná se o ListLevelCollection), poté nastavte ListLevel.NumberStyle (hodnota NumberStyle, např. Arabic, UppercaseRoman, LowercaseLetter nebo Bullet) a NumberFormat — formátovací řetězec, který spojuje číslo s doslovným textem, jako je tečka nebo závorka — společně, protože nesoulad mezi nimi vede k neočekávanému vykreslení. StartAt určuje počáteční číslo úrovně a RestartAfterLevel určuje, čího vyšší úrovně inkrement restartuje čítač této úrovně — nastavte jej explicitně u vnořených seznamů místo spoléhání se na výchozí chování restartu. Alignment (Left, Center, Right) a TrailingCharacter (Tab, Space, Nothing) řídí umístění popisku a oddělovač mezi popiskem a textem odstavce, spolu s TabPosition, NumberPosition a TextPosition pro přesné rozvržení. IsLegal vynutí číslování ve stylu zákona (vždy arabské), bez ohledu na NumberStyle.


Krok 5: Přidat obrázkový odrážkový znak do úrovně seznamu

Zavolejte ListLevel.CreatePictureBullet() na cílové úrovni pro vytvoření definice obrázkového odrážkového znaku, poté zadejte ImageData odrážky před odstraněním jakéhokoli existujícího textového odrážkového formátování na stejné úrovni. Zavolejte DeletePictureBullet() k odstranění obrázkového odrážkového znaku a návratu k textovému odrážkovému formátování.


Krok 6: Prozkoumat vykreslený popisek položky seznamu

ListLabel popisuje štítek, který je ve skutečnosti vykreslen pro jednu instanci položky seznamu, získaný z formátování odstavce položky. LabelString je doslovný text, který Word zobrazuje — například “3.” nebo “•” — LabelValue je základní číselná hodnota a Font je vlastní formátování štítku, nezávislé na formátování textu odstavce. Pro výpočet hodnoty štítku na libovolné pozici v sekvenci bez vykreslování celého seznamu zavolejte ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat).


Běžné problémy a opravy

Dva odstavce, které by měly být číslovány nezávisle, pokračují ve stejné sekvenci. Oba odstavce ListFormat.List odkazuje na stejný sdílený List objekt. Dejte druhé skupině její vlastní seznam pomocí ListCollection.AddCopy(srcList) namísto opětovného používání 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 úroveň NumberStyle. Ověřte NumberFormat and NumberStyle jsou nastaveny konzistentně pro upravovanou úroveň.

Odsazení seznamu vypadá špatně po programové změně úrovní. ListLevelNumber byl nastaven přímo bez aktualizace souvisejících vlastností pozice. Použijte ListFormat.ListIndent()/ListOutdent() místo nastavení ListLevelNumber přímo.

Obrázková odrážka se nezobrazuje na úrovni. Pro tuto úroveň nebyla vytvořena žádná obrázková odrážka, nebo je stále aktivní výchozí formátování textové odrážky. Zavolejte ListLevel.CreatePictureBullet() a před odstraněním formátování textové odrážky poskytněte data obrázku.

Seznam propojený stylem nereaguje na přímé změny formátování. Check List.IsListStyleReference — formátování seznamu odkazujícího na styl je řízeno jeho propojeným Style (prostřednictvím List.Style), nikoli úpravou seznamu přímo. Porovnat s IsListStyleDefinition k rozlišení seznamu, který definuje vlastní formátování.


Často kladené otázky

Jaký je rozdíl mezi List a ListFormat?

List je znovupoužitelná definice číslování nebo 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 zjistím, zda je odstavec již součástí seznamu?

Přečtěte si ListFormat.IsListItem o formátování odstavce. Pokud true, ListFormat.List a ListLevelNumber určují, ke kterému seznamu a úrovni patří.

Jak mohu 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 aplikujte tuto kopii na nové odstavce místo opětovného použití původního List, který by pokračoval ve stejném counteru.

Jak vytvořit odrážkový nebo číslovaný seznam od začátku?

Použijte ListFormat.ApplyBulletDefault() nebo ApplyNumberDefault() pro výchozí formátování Wordu, nebo ListCollection.Add(listTemplate) s hodnotou ListTemplate, abyste začali s předdefinovaným formátem a upravili tak vzniklý List.ListLevels odtud.

Jak získám číselný formát jako “1)” místo “1.”?

Nastavte ListLevel.NumberFormat na příslušné úrovni na požadovaný formátovací řetězec, spolu s NumberStyle pro samotný styl číslování.


Viz také:

 Čeština