Arbeiten mit Tabellen

Arbeiten mit Tabellen

Tabellen in Aspose.Words FOSS für .NET werden dargestellt durch die Aspose.Words.Tables Namensraum: Table, Row, und Cell bilden eine dreistufige zusammengesetzte Knotenhierarchie, die im Dokumentbaum neben Absätzen liegt. Diese Seite behandelt das Erstellen von Tabellen mit DocumentBuilder, das Formatieren von Zeilen und Zellen, die Steuerung des tabellenweiten Layouts und das Zusammenführen von Zellen.


Das Tabellen-Objektmodell

Ein Table ist ein CompositeNode, das Row-Knoten enthält, und jedes Row ist ein CompositeNode, das Cell-Knoten enthält; ein Cell wiederum enthält Absätze und ggf. verschachtelte Tabellen. Table.Rows liefert ein RowCollection, Row.Cells liefert ein CellCollection, und ein Body oder ein anderer Story stellt jede top-level Tabelle über seine Tables-Eigenschaft, ein TableCollection, bereit. Alle drei Sammlungen unterstützen Add(), Insert(), Remove(), RemoveAt(), Contains() und IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() und Cell.EnsureMinimum() fügen jeweils den kleinsten gültigen Inhalt ein, den ein Knoten dieses Typs benötigt (eine leere Zeile, eine leere Zelle bzw. einen leeren Absatz), nachdem programmatische Änderungen keinen mehr hinterlassen haben.


Tabellen erstellen mit DocumentBuilder

DocumentBuilder.StartTable() beginnt an der Cursorposition eine neue Tabelle, InsertCell() fügt der aktuellen Zeile eine Zelle hinzu, EndRow() schließt die aktuelle Zeile und EndTable() schließt die Tabelle. Setzen Sie DocumentBuilder.CellFormat und DocumentBuilder.RowFormat, bevor Sie InsertCell() oder EndRow() aufrufen, um die Standardformatierung auf Zellen und Zeilen anzuwenden, wenn sie erstellt werden – diese Eigenschaften dienen als Vorlage für den Inhalt, den der Builder als Nächstes einfügt, nicht als nachträgliche Änderung bereits im Dokument vorhandener Zellen.


Zellen- und Zeilenformatierung

Cell.CellFormat ist eine CellFormat Instanz (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) mit ClearFormatting(), um sie zurückzusetzen, und SetPaddings(), um alle vier Zellabstände gleichzeitig festzulegen. Row.RowFormat ist eine RowFormat Instanz (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) mit ihrem eigenen ClearFormatting().


Tabellenweite Formatierung und AutoFit

Table selbst stellt Layout-Eigenschaften bereit – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, und Zugänglichkeits-Metadaten über Title und Description. Table.AutoFit(AutoFitBehavior) ändert die Größe der Tabelle und ihrer Zellen gemäß dem angegebenen Verhalten. SetBorder() legt eine Rahmen-Seite fest und SetBorders() setzt jeden Rahmen auf denselben Linienstil, dieselbe Breite und dieselbe Farbe über die gesamte Tabelle hinweg; ClearBorders() und ClearShading() setzen diese zurück. ConvertToHorizontallyMergedCells() konvertiert Zellen, die durch gleiche Breite zusammengeführt wurden, in Zellen, die ausdrücklich mit HorizontalMerge gekennzeichnet sind.


Bevorzugte und Zellbreiten

PreferredWidth stellt eine Breite und deren Einheit dar, erstellt mit den statischen Fabrikmethoden PreferredWidth.FromPercent() oder PreferredWidth.FromPoints(); PreferredWidthType ermittelt, welche Art von Wert (Auto, Percent oder Points) ein gegebener PreferredWidth enthält. Sowohl Table.PreferredWidth als auch CellFormat.PreferredWidth akzeptieren diese Werte.


Zusammengeführte Zellen

CellFormat.HorizontalMerge und CellFormat.VerticalMerge (CellMerge) markieren, wie eine Zelle an einer horizontalen oder vertikalen Zusammenführung mit ihren Nachbarn teilnimmt. CellVerticalAlignment steuert, wie der Inhalt innerhalb einer Zelle vertikal ausgerichtet wird, unabhängig vom Zusammenführungsstatus.


Tipps und bewährte Verfahren

  • Schließen Sie jedes StartTable() mit einem passenden EndRow() pro Zeile und einem abschließenden EndTable() – ein nicht geschlossener Zeilen- oder Tabellenabschnitt lässt den internen Zustand des Builders (und den resultierenden Dokumentbaum) fehlerhaft zurück.
  • Setzen Sie DocumentBuilder.CellFormat und DocumentBuilder.RowFormat vor jedem Aufruf von InsertCell() oder EndRow(), wenn unterschiedliche Zeilen oder Zellen in derselben Tabelle verschiedene Formatierungen benötigen; der Builder wendet das an, was zum Zeitpunkt der Einfügung gerade eingestellt ist.
  • Rufen Sie Table.EnsureMinimum(), Row.EnsureMinimum() oder Cell.EnsureMinimum() nach dem programmgesteuerten Entfernen von Inhalten auf, damit der Knoten die minimale gültige Struktur beibehält, die Word erwartet.
  • Verwenden Sie PreferredWidth.FromPercent() für Tabellen, die sich an die verfügbare Seitenbreite anpassen sollen, und PreferredWidth.FromPoints() für eine feste Layoutbreite.
  • AutoFitBehavior wird angewendet, wenn Sie Table.AutoFit() aufrufen – es wird nicht kontinuierlich neu ausgeführt, wenn Sie Inhalte hinzufügen oder entfernen, rufen Sie es also nach umfangreichen Änderungen erneut auf, falls die Tabelle neu angepasst werden muss.

Häufige Probleme

ProblemUrsacheLösung
Tabelle sieht fehlerhaft aus oder erzeugt beim Speichern einen FehlerEine Zeile oder die Tabelle wurde nie mit EndRow() / EndTable() geschlossenKombiniere immer StartTable() mit einem abschließenden EndTable() und schließe jede Zeile mit EndRow()
Neue Zellen übernehmen die von mir festgelegte Formatierung nichtCellFormat / RowFormat wurden im Builder geändert, nachdem die Zellen bereits eingefügt wurdenSetze DocumentBuilder.CellFormat / RowFormat, bevor du InsertCell() / EndRow() für diesen Inhalt aufrufst
Die Tabelle wird nach Änderungen nicht so angepasst, wie ich es erwarte.AutoFit() spiegelt den Zustand der Tabelle zum Zeitpunkt des Aufrufs wider, nicht kontinuierlich.Rufen Sie Table.AutoFit(AutoFitBehavior) nach strukturellen Änderungen erneut auf.
Nebeneinander liegende Zellen, die zusammengeführt aussehen, verhalten sich als separate Zellen.Zellen wurden nur nach Breite abgeglichen, nicht mit CellMerge gekennzeichnet.Rufen Sie Table.ConvertToHorizontallyMergedCells() auf, oder setzen Sie CellFormat.HorizontalMerge / VerticalMerge explizit.

FAQ

Wie erstelle ich eine Tabelle von Grund auf mit DocumentBuilder?

Rufen Sie StartTable() auf, dann InsertCell() für jede Zelle in einer Zeile, EndRow() zum Schließen der Zeile, wiederholen Sie dies für weitere Zeilen und schließlich EndTable() zum Schließen der Tabelle.

Wie lege ich eine prozentbasierte Tabellenbreite anstelle einer festen Breite fest?

Weisen Sie Table.PreferredWidth = PreferredWidth.FromPercent(value) anstelle von PreferredWidth.FromPoints(value) zu.

Wie setze ich die gesamte Formatierung einer Zelle oder Zeile zurück?

Rufen Sie CellFormat.ClearFormatting() auf dem CellFormat einer Zelle auf, oder RowFormat.ClearFormatting() auf dem RowFormat einer Zeile.

Wie setze ich Rahmen und Schattierung für die gesamte Tabelle gleichzeitig?

Verwenden Sie Table.SetBorders() für einen einheitlichen Rahmen auf allen Seiten, Table.SetBorder() für eine Seite nach der anderen und Table.SetShading() für eine einheitliche Schattierung; ClearBorders() und ClearShading() setzen sie zurück.


API Reference Zusammenfassung

Klasse / AufzählungBeschreibung
TableTabellenknoten; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowTabellenzeilenknoten; Cells, RowFormat, EnsureMinimum()
CellTabellenzellenknoten; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionTypisierte Sammlungen von Table / Row / Cell Knoten
CellFormatPro-Zelle-Formatierung: Rahmen, Schattierung, Abstand, Zusammenführungsstatus, vertikale Ausrichtung
RowFormatPro-Zeilen-Formatierung: Rahmen, Höhe, Seitenumbruchverhalten
PreferredWidth / PreferredWidthTypeTabellen- oder Zellenbreitenwert und seine Einheit (auto, percent, points)
AutoFitBehaviorWie Table.AutoFit() eine Tabelle und ihre Zellen in der Größe anpasst
CellMerge / CellVerticalAlignmentHorizontal/vertikaler Zellenzusammenführungsstatus und vertikale Inhaltsausrichtung
TableAlignment / TableStyleOptions / TextWrappingTabellenweite Ausrichtung, Stil-Anwendung und Textumbruchverhalten
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableCursor-basierte Tabellenerstellung

Siehe auch

 Deutsch