Arbeiten mit Listen
Arbeiten mit Listen
Dieser Leitfaden zeigt, wie nummerierte und Aufzählungslisten in Aspose.Words FOSS für .NET dargestellt und gesteuert werden. Ein List ist eine wiederverwendbare Listendefinition, die von jedem Absatz, der sie verwendet, gemeinsam genutzt wird, ListFormat ist die Art und Weise, wie ein einzelner Absatz auf eine Liste und deren aktuelle Ebene verweist, und ListLevel enthält die tatsächliche Nummerierungs- oder Aufzählungsformatierung für eine Ebene einer Liste.
Das Listenobjekt und ListCollection
List stellt eine Listendefinition dar — die Nummerierungsregeln, die ein Dokument auf viele Absätze anwenden kann. List.ListId identifiziert sie, List.IsMultiLevel gibt an, ob sie mehr als eine Ebene definiert, und List.ListLevels liefert ein ListLevelCollection, das ein ListLevel pro Ebene der definierten Liste enthält. List.IsListStyleDefinition und IsListStyleReference unterscheiden eine Liste, die ihre eigene Formatierung definiert, von einer, die die Formatierung über ein verknüpftes Style referenziert (verfügbar über List.Style). Auf die Listen jedes Dokuments wird über Document.Lists zugegriffen, das ein ListCollection zurückgibt: ListCollection.Add(listTemplate) erzeugt eine neue Liste aus einem der vordefinierten ListTemplate-Formate von Word, Add(listStyle) erstellt eine aus einem Style, AddSingleLevelList(listTemplate) erzeugt eine einstufige Variante, und AddCopy(srcList) dupliziert eine bestehende Liste — nützlich, wenn Absätze eine unabhängige Nummerierung (ein frischer Neustart) erhalten sollen, anstatt denselben Zähler zu teilen. ListCollection.GetListByListId(listId) ruft eine bestimmte Liste ab, und Count gibt an, wie viele Listen das Dokument enthält.
Anwenden von Listen auf Absätze mit ListFormat
ListFormat, über die Formatierung eines Absatzes erreichbar, steuert, zu welcher Liste ein Absatz gehört und auf welcher Ebene. ListFormat.List ist das List, das der Absatz verwendet, und ListFormat.ListLevelNumber ist die nullbasierte Ebene innerhalb dieser Liste; IsListItem gibt an, ob der Absatz überhaupt Teil einer Liste ist. ApplyBulletDefault() und ApplyNumberDefault() wenden die Standard-Aufzählungs- bzw. Nummerierungsformatierung von Word in einem Aufruf auf einen Absatz an, RemoveNumbers() entfernt die Listformatierung, und ListIndent()/ListOutdent() verschieben einen Absatz tiefer in die Ebenen der Liste bzw. wieder nach oben — dieselben Vorgänge, die Word ausführt, wenn man am Anfang eines Listenabsatzes Tab oder Shift+Tab drückt.
Listenebenen und Nummerierungsstil
ListLevel enthält die Formatierung für eine Ebene einer Liste: NumberStyle (ein NumberStyle Enum-Wert wie arabische Ziffern oder römische Ziffern), NumberFormat (die Formatzeichenfolge, die die Zahl mit Literaltext kombiniert, z.B. ein Punkt oder eine Klammer), StartAt (die Startzahl) und RestartAfterLevel (welche höhere Ebene den Inkrement zurücksetzt und damit den Zähler dieser Ebene neu startet). Alignment (ein ListLevelAlignment Wert: Left, Center, Right) und TrailingCharacter (ein ListTrailingCharacter Wert: Tab, Space, Nothing) steuern, wie das Etikett positioniert und vom Absatztext getrennt wird, zusammen mit TabPosition, NumberPosition und TextPosition für ein präzises Layout. IsLegal erzwingt eine juristische Nummerierung (immer arabisch, unabhängig von NumberStyle), und LinkedStyle verknüpft die Ebene mit einem Absatz-Style. Für Bild-Aufzählungszeichen verwalten CreatePictureBullet() und DeletePictureBullet() ein ImageData Aufzählungszeichen-Bild, und ListLevel.Font legt die Formatierung der Zahl oder des Aufzählungszeichenzeichens selbst fest. ListLevel.GetEffectiveValue(index, numberStyle, customNumberStyleFormat) berechnet den tatsächlichen Etikettenwert an einer bestimmten Position in der Nummerierungssequenz.
Listeneetiketten und vordefinierte Vorlagen
ListLabel beschreibt das gerenderte Etikett für eine bestimmte Listenelement-Instanz — LabelString ist der Literaltext, den Word anzeigt (wie „3.“ oder „•“), LabelValue ist der zugrunde liegende numerische Wert, und Font ist die Formatierung des Etiketts. ListTemplate ist ein Enum der vordefinierten Listformate von Word (Aufzählungsstilarten wie BulletDefault, BulletDisk, BulletCircle, BulletSquare, BulletDiamonds und nummerierte Formate), das zusammen mit ListCollection.Add(listTemplate) verwendet wird, um von einem integrierten Format aus zu starten, anstatt die Eigenschaften einzeln zu erstellen.
Tipps und bewährte Vorgehensweisen
- Verwenden Sie
ListCollection.AddCopy(srcList), wenn eine neue Gruppe von Absätzen eine Listennummerierung benötigt, die unabhängig von vorne beginnt, anstatt ein bereits an andere Absätze angehängtesListwiederzuverwenden. - Bevorzugen Sie
ListFormat.ApplyNumberDefault()/ApplyBulletDefault()für Standardlisten, anstatt jedeListLevel-Eigenschaft manuell zu konfigurieren. - Überprüfen Sie
List.IsListStyleReferencegegenüberIsListStyleDefinition, bevor Sie die Listformatierung direkt ändern — die Formatierung einer stilreferenzierenden Liste kann stattdessen von ihrem verknüpftenStylegesteuert werden. - Setzen Sie
RestartAfterLevelexplizit bei verschachtelten Listen, anstatt sich auf das standardmäßige Neustartverhalten zu verlassen, wenn die Nummerierung auf bestimmten Gliederungsebenen zurückgesetzt werden muss. - Verwenden Sie
ListFormat.ListIndent()/ListOutdent(), um einen Absatz zwischen Listenebenen zu verschieben, anstattListLevelNumberdirekt zu setzen, da diese Methoden die Listformatierung des Absatzes intern konsistent halten.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Zwei Absätze, die eigenständig nummeriert werden sollten, setzen die gleiche Sequenz fort | Der ListFormat.List beider Absätze bezieht sich auf dasselbe geteilte List-Objekt | Geben Sie dem zweiten Absatz über ListCollection.AddCopy(srcList) eine eigene Liste, anstatt dieselbe List wiederzuverwenden. |
| Ein benutzerdefinierter Nummerierungsformat-String wird nicht wie erwartet gerendert. | ListLevel.NumberFormat stimmt nicht mit dem erwarteten Muster für das NumberStyle der Ebene überein. | Überprüfen Sie, ob NumberFormat und NumberStyle für die zu bearbeitende Ebene konsistent gesetzt sind. |
| Die Listeneinrückung sieht nach dem programmgesteuerten Ändern der Ebenen falsch aus. | ListLevelNumber wurde direkt gesetzt, ohne die zugehörigen Positions-Eigenschaften zu aktualisieren. | Verwenden Sie ListFormat.ListIndent()/ListOutdent() anstelle von ListLevelNumber direkt zu setzen. |
| Ein Bild-Aufzählungszeichen wird nicht angezeigt. | Für die Ebene wurde kein Bild-Aufzä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. |
FAQ
Was ist der Unterschied zwischen List und ListFormat?
List ist die wiederverwendbare Nummerierungs-/Aufzählungsdefinition, die über Absätze hinweg geteilt wird; ListFormat ist pro Absatz — sie gibt an, welches List ein bestimmter Absatz verwendet und auf welcher Ebene, über ListFormat.List und ListLevelNumber.
Wie prüfe ich, ob ein Absatz Teil einer Liste ist?
Lesen Sie ListFormat.IsListItem zur Formatierung des Absatzes; wenn true, beschreiben ListFormat.List und ListLevelNumber, zu welcher Liste und Ebene er gehört.
Wie lasse ich eine neue Liste unabhängig von einer bestehenden Liste ab 1 nummerieren?
Verwenden Sie ListCollection.AddCopy(srcList), um eine unabhängige Kopie der Listendefinition zu erstellen, und wenden Sie dann die Kopie auf die neuen Absätze an – anstatt das ursprüngliche List wiederzuverwenden, das denselben Zähler fortsetzen würde.
Wie erstelle ich eine Aufzählungs- oder nummerierte Liste von Grund auf neu?
Verwenden Sie ListFormat.ApplyBulletDefault() oder ApplyNumberDefault() für die Standardformatierung von Word, oder ListCollection.Add(listTemplate) mit einem ListTemplate-Wert, um von einem der vordefinierten Formate von Word zu starten und das daraus resultierende List.ListLevels anzupassen.
Wie kann ich das Zahlenformat steuern, z.B. „1)“ statt „1.“?
Legen Sie ListLevel.NumberFormat auf der entsprechenden Ebene auf die gewünschte Formatzeichenfolge fest, zusammen mit NumberStyle für den Zahlenstil selbst.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
List | Eine wiederverwendbare Listendefinition (Nummerierung/Aufzählungszeichen) |
ListCollection | Die Sammlung aller Listen in einem Dokument |
ListCollection.Add(listTemplate) / AddCopy(srcList) | Erstelle eine Liste aus einer vordefinierten Vorlage oder kopiere eine bestehende |
ListFormat | Pro-Absatz-Referenz auf ein List und die aktuelle Ebene |
ListFormat.ApplyBulletDefault() / ApplyNumberDefault() | Wenden Sie die Standard-Aufzählungs- oder Nummerierungsformatierung auf einen Absatz an |
ListLevel | Nummerierungs-/Aufzählungsformatierung für eine Ebene eines List |
ListLevel.NumberStyle / NumberFormat | Der Ziffernstil und die Formatzeichenfolge für eine Ebene |
ListLabel | Das gerenderte Label (Text und Wert) für ein bestimmtes Listenelement |
ListTemplate | Enum der vordefinierten Listenformate von Word |