Wie man mit Listen in .NET arbeitet

Wie man mit Listen in .NET arbeitet

Wie man mit Listen in .NET arbeitet

Nummerierte und Aufzählungslisten in einem Word-Dokument werden aus drei zusammenarbeitenden Objekten aufgebaut: List, die wiederverwendbare Nummerierungsdefinition; ListFormat, das einem bestimmten Absatz mitteilt, zu welcher Liste und Ebene er gehört; und ListLevel, das die tatsächliche Formatierung für eine Ebene enthält. Dieser Leitfaden zeigt, wie man eine Liste auf einen Absatz anwendet, separate Listen davon abhält, sich einen Zähler zu teilen, Absätze zwischen Ebenen verschiebt und die Nummerierungs- und Aufzählungsformatierung mit Aspose.Words FOSS für .NET anpasst.


Schritt-für-Schritt-Anleitung

Schritt 1: Eine Liste auf einen Absatz anwenden

Verwenden Sie ListFormat.ApplyBulletDefault() oder ApplyNumberDefault() in der Formatierung eines Absatzes, um Word’s Standardaufzählungs- oder Nummerierungsliste in einem Aufruf anzuwenden — dies ist der schnellste Weg, eine Standardliste zu verwenden. Für ein bestimmtes vordefiniertes Format anstelle des Standards rufen Sie Document.Lists (ein ListCollection) .Add(listTemplate) mit einem ListTemplate Wert wie BulletDisk, BulletSquare, NumberArabicDot oder NumberUppercaseRomanDot auf, um ein List aus einem der integrierten Formate von Word zu erstellen, oder AddSingleLevelList(listTemplate) für eine ein-stufige Variante. Sobald ein Absatz eine Listformatierung hat, gibt ListFormat.IsListItem true zurück, und ListFormat.List/ListLevelNumber identifizieren, welche Liste und Ebene verwendet werden.


Schritt 2: Einer neuen Gruppe von Absätzen eine unabhängige Nummerierung zuweisen

Absätze, deren ListFormat.List auf dasselbe gemeinsam genutzte List-Objekt verweist, setzen denselben Zähler fort. Wenn eine neue Gruppe von Absätzen eine Nummerierung benötigt, die unabhängig von 1 neu startet, rufen Sie ListCollection.AddCopy(srcList) auf, um eine vorhandene Listendefinition zu duplizieren, und wenden Sie dann die Kopie auf die neuen Absätze an, anstatt das Original zu verwenden. ListCollection.GetListByListId(listId) ruft eine bestimmte Liste anhand ihres ListId ab, wenn Sie eine vorhandene nachschlagen statt eine neue zu erstellen, und Count gibt an, wie viele Listen das Dokument derzeit enthält.


Schritt 3: Einen Absatz zwischen Listenebenen verschieben

Verwenden Sie ListFormat.ListIndent(), um einen Absatz eine Ebene tiefer in seine Liste zu verschieben, und ListOutdent(), um ihn eine Ebene höher zu verschieben — dieselben Vorgänge, die Word für Tab und Shift+Tab am Anfang eines Listenelements ausführt. Bevorzugen Sie diese Methoden gegenüber dem direkten Setzen von ListLevelNumber, da sie die Listformatierung des Absatzes intern konsistent halten. Rufen Sie RemoveNumbers() auf, um die Listformatierung eines Absatzes vollständig zu entfernen.


Schritt 4: Das Nummerierungsformat einer Listenebene anpassen

Greifen Sie über List.ListLevels (ein ListLevelCollection) auf eine bestimmte Ebene zu und setzen Sie dann ListLevel.NumberStyle (ein NumberStyle-Wert wie Arabic, UppercaseRoman, LowercaseLetter oder Bullet) sowie NumberFormat — die Formatzeichenkette, die die Zahl mit einem Literal wie einem Punkt oder einer Klammer kombiniert — zusammen, da ein nicht übereinstimmendes Paar zu unerwarteter Darstellung führt. StartAt legt die Startnummer der Ebene fest und RestartAfterLevel bestimmt, welcher höhere Ebenen-Inkrement diesen Ebenenzähler zurücksetzt — setzen Sie es explizit bei verschachtelten Listen, anstatt sich auf das Standard-Neustartverhalten zu verlassen. Alignment (Left, Center, Right) und TrailingCharacter (Tab, Space, Nothing) steuern die Position des Labels und den Trenner zwischen dem Label und dem Absatztext, zusammen mit TabPosition, NumberPosition und TextPosition für ein präzises Layout. IsLegal erzwingt eine juristische Nummerierung (immer arabisch) unabhängig von NumberStyle.


Schritt 5: Einen Bildaufzählungszeichen zu einer Listenebene hinzufügen

Rufen Sie ListLevel.CreatePictureBullet() für die Zielebene auf, um eine Bild-Aufzählungszeichen-Definition zu erstellen, und geben Sie anschließend das ImageData des Aufzählungszeichens an, bevor Sie vorhandene Text-Aufzählungszeichen-Formatierungen auf derselben Ebene entfernen. Rufen Sie DeletePictureBullet() auf, um ein Bild-Aufzählungszeichen zu entfernen und zur textbasierten Aufzählungszeichen-Formatierung zurückzukehren.


Schritt 6: Das gerenderte Label eines Listenelements untersuchen

ListLabel beschreibt das tatsächlich für eine Listenelement-Instanz gerenderte Etikett, das über die Absatzformatierung des Elements erreicht wird. LabelString ist der wörtliche Text, den Word anzeigt – zum Beispiel „3.“ oder „•“ – LabelValue ist der zugrunde liegende numerische Wert, und Font ist die eigene Formatierung des Etiketts, unabhängig von der Formatierung des Absatztexts. Um den Wert eines Etiketts an einer beliebigen Position in der Sequenz zu berechnen, ohne die gesamte Liste zu rendern, rufen Sie ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat) auf.


Häufige Probleme und Lösungen

Zwei Absätze, die unabhängig nummeriert werden sollen, setzen die gleiche Sequenz fort. Beide Absätze’ ListFormat.List bezieht sich auf das gleiche gemeinsam genutzte List Objekt. Gib der zweiten Gruppe ihre eigene Liste via ListCollection.AddCopy(srcList) statt das Gleiche wiederzuverwenden List.

Ein benutzerdefinierter Nummerierungsformat-String wird nicht wie erwartet gerendert. ListLevel.NumberFormat passt nicht zum erwarteten Muster für die Ebene NumberStyle. Überprüfen NumberFormat and NumberStyle werden konsequent für die zu bearbeitende Ebene festgelegt.

Die Listeneinrückung sieht nach dem programmatischen Ändern der Ebenen falsch aus. ListLevelNumber wurde direkt gesetzt, ohne die zugehörigen Positionsattribute zu aktualisieren. Verwenden Sie ListFormat.ListIndent()/ListOutdent() statt zu setzen ListLevelNumber direkt.

Ein Bildaufzählungszeichen erscheint nicht auf einer Ebene. Für diese Ebene wurde kein Bildaufzählungszeichen erstellt, oder die Standard-Text-Aufzählungsformatierung ist noch aktiv. Rufen Sie ListLevel.CreatePictureBullet() auf und übergeben Sie die Bilddaten, bevor Sie die Text-Aufzählungsformatierung entfernen.

Eine stilverknüpfte Liste reagiert nicht auf direkte Formatierungsänderungen. Check List.IsListStyleReference — die Formatierung einer stilreferenzierenden Liste wird von ihrer verknüpften Style (via List.Style), nicht durch direktes Bearbeiten der Liste. Vergleichen Sie mit IsListStyleDefinition um eine Liste zu unterscheiden, die ihre eigene Formatierung definiert.


Häufig gestellte Fragen

Was ist der Unterschied zwischen List und ListFormat?

List ist die wiederverwendbare Nummerierungs- oder Aufzählungsdefinition, die über Absätze hinweg geteilt wird. ListFormat ist pro Absatz — sie verweist darauf, welches List ein bestimmter Absatz verwendet und auf welcher Ebene, über ListFormat.List und ListLevelNumber.

Wie prüfe ich, ob ein Absatz bereits Teil einer Liste ist?

Lese ListFormat.IsListItem zur Formatierung des Absatzes. Falls true, identifizieren ListFormat.List und ListLevelNumber, zu welcher Liste und Ebene er gehört.

Wie lasse ich eine neue Liste unabhängig von einer bestehenden Liste bei 1 beginnen?

Verwende ListCollection.AddCopy(srcList), um eine unabhängige Kopie der Listendefinition zu erstellen, und wende die Kopie dann auf die neuen Absätze an, anstatt die ursprüngliche List wiederzuverwenden, die denselben Zähler fortsetzen würde.

Wie erstelle ich eine Aufzählungs- oder nummerierte Liste von Grund auf?

Verwenden Sie ListFormat.ApplyBulletDefault() oder ApplyNumberDefault() für die Standardformatierung von Word oder ListCollection.Add(listTemplate) mit einem ListTemplate-Wert, um von einem vordefinierten Format auszugehen und das daraus resultierende List.ListLevels anzupassen.

Wie erhalte ich ein Zahlenformat wie „1)“ anstelle von „1.“?

Legen Sie ListLevel.NumberFormat auf der entsprechenden Ebene auf die gewünschte Formatzeichenfolge fest, zusammen mit NumberStyle für den Ziffernstil selbst.


Siehe auch

 Deutsch