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 passendenEndRow()pro Zeile und einem abschließendenEndTable()– ein nicht geschlossener Zeilen- oder Tabellenabschnitt lässt den internen Zustand des Builders (und den resultierenden Dokumentbaum) fehlerhaft zurück. - Setzen Sie
DocumentBuilder.CellFormatundDocumentBuilder.RowFormatvor jedem Aufruf vonInsertCell()oderEndRow(), 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()oderCell.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, undPreferredWidth.FromPoints()für eine feste Layoutbreite. AutoFitBehaviorwird angewendet, wenn SieTable.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
| Problem | Ursache | Lösung |
|---|---|---|
| Tabelle sieht fehlerhaft aus oder erzeugt beim Speichern einen Fehler | Eine Zeile oder die Tabelle wurde nie mit EndRow() / EndTable() geschlossen | Kombiniere immer StartTable() mit einem abschließenden EndTable() und schließe jede Zeile mit EndRow() |
| Neue Zellen übernehmen die von mir festgelegte Formatierung nicht | CellFormat / RowFormat wurden im Builder geändert, nachdem die Zellen bereits eingefügt wurden | Setze 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ählung | Beschreibung |
|---|---|
Table | Tabellenknoten; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Tabellenzeilenknoten; Cells, RowFormat, EnsureMinimum() |
Cell | Tabellenzellenknoten; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Typisierte Sammlungen von Table / Row / Cell Knoten |
CellFormat | Pro-Zelle-Formatierung: Rahmen, Schattierung, Abstand, Zusammenführungsstatus, vertikale Ausrichtung |
RowFormat | Pro-Zeilen-Formatierung: Rahmen, Höhe, Seitenumbruchverhalten |
PreferredWidth / PreferredWidthType | Tabellen- oder Zellenbreitenwert und seine Einheit (auto, percent, points) |
AutoFitBehavior | Wie Table.AutoFit() eine Tabelle und ihre Zellen in der Größe anpasst |
CellMerge / CellVerticalAlignment | Horizontal/vertikaler Zellenzusammenführungsstatus und vertikale Inhaltsausrichtung |
TableAlignment / TableStyleOptions / TextWrapping | Tabellenweite Ausrichtung, Stil-Anwendung und Textumbruchverhalten |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Cursor-basierte Tabellenerstellung |