Wie man mit Tabellen in .NET arbeitet

Wie man mit Tabellen in .NET arbeitet

Dieser Leitfaden zeigt, wie man Tabellen programmgesteuert erstellt, formatiert und liest in Aspose.Words FOSS für .NET, unter Verwendung der Table, Row, und Cell Klassen im Aspose.Words.Tables Namespace zusammen mit DocumentBuilder. Es behandelt das Erstellen einer Tabelle von Grund auf, das Formatieren von Zellen und Zeilen während des Aufbaus, die Steuerung des Layouts der gesamten Tabelle und AutoFit, das Festlegen bevorzugter Breiten, das Zusammenführen von Zellen und das Lesen bereits vorhandener Tabellen in einem geladenen Dokument.

Schritt-für-Schritt-Anleitung

Schritt 1: Paket installieren

Aspose.Words FOSS für .NET veröffentlicht noch kein NuGet-Paket – bauen Sie die Bibliothek stattdessen aus dem Quellcode. Klonen Sie https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git und bauen Sie dann Aspose.Words.sln in der Release-Konfiguration mit dem .NET SDK und binden Sie die resultierende Aspose.Words-Assembly in Ihr Projekt ein. Die Bibliothek zielt auf .NET Standard 2.0 ab, sodass sie auf .NET Framework 4.6.2+ und .NET 6/8/10 läuft.


Schritt 2: Erforderliche Klassen importieren

Fügen Sie eine using Aspose.Words;-Direktive für die Kern-Dokumentklassen (Document, DocumentBuilder) hinzu und eine using Aspose.Words.Tables;-Direktive für die tabellenspezifischen Klassen, die in diesem Leitfaden behandelt werden – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth und zugehörige Enums.


Schritt 3: Erstelle eine neue Tabelle mit DocumentBuilder

Erstelle ein Document und ein DocumentBuilder, das daran gebunden ist, rufe dann DocumentBuilder.StartTable() auf, um eine Tabelle am Cursor zu beginnen. Für jede Zelle in einer Zeile rufe DocumentBuilder.InsertCell() auf, und schließe die Zeile mit DocumentBuilder.EndRow(). Wiederhole dies für so viele Zeilen, wie die Tabelle benötigt, und schließe die gesamte Tabelle mit DocumentBuilder.EndTable(). Jeder StartTable() benötigt ein passendes EndTable(), und jede Zeile benötigt ein passendes EndRow(), sonst wird der interne Zustand des Builders – und der resultierende Dokumentbaum – fehlerhaft.


Schritt 4: Formatiere Zellen und Zeilen beim Erstellen

Setze DocumentBuilder.CellFormat und DocumentBuilder.RowFormat bevor du InsertCell() oder EndRow() aufrufst, um die Formatierung auf die Zellen und Zeilen anzuwenden, die der Builder gerade erstellen soll – diese beiden Eigenschaften fungieren als Vorlage für neuen Inhalt, nicht als nachträgliche Änderung bereits eingefügter Zellen. CellFormat stellt Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth sowie die vier Padding-Eigenschaften (LeftPadding, RightPadding, TopPadding, BottomPadding) bereit, die alle gleichzeitig mit SetPaddings() gesetzt werden können. RowFormat stellt Borders, Height, HeightRule, AllowBreakAcrossPages und HeadingFormat bereit. Rufe CellFormat.ClearFormatting() oder RowFormat.ClearFormatting() auf, um eines von beiden vor dem Setzen neuer Werte für die nächste Zeile oder Zelle auf die Standardwerte zurückzusetzen.


Schritt 5: Lege das tabellenweite Layout und AutoFit fest

Sobald die Tabelle existiert, setze Layout-Eigenschaften direkt am Table-Objekt: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) und TextWrapping. Rufe Table.SetBorders() auf, um einen Rahmenstil, eine Breite und eine Farbe für die gesamte Tabelle anzuwenden, oder Table.SetBorder(), um eine einzelne Seite festzulegen; ClearBorders() und ClearShading() setzen diese zurück. Table.AutoFit(AutoFitBehavior) ändert die Größe der Tabelle und ihrer Zellen gemäß dem gewählten Verhalten – rufe sie nach jeder strukturellen Änderung erneut auf, da sie den Tabellenzustand nur zum Zeitpunkt ihrer Ausführung widerspiegelt, nicht kontinuierlich.


Schritt 6: Lege bevorzugte und Zellbreiten fest

Erstelle Breitenwerte mit den statischen Fabrikmethoden PreferredWidth.FromPercent() für ein Layout, das sich an die verfügbare Seitenbreite anpasst, oder PreferredWidth.FromPoints() für eine feste Breite; PreferredWidthType gibt an, welche Art von Wert (Auto, Percent oder Points) ein gegebener PreferredWidth enthält. Weisen Sie das Ergebnis entweder Table.PreferredWidth für die gesamte Tabelle oder CellFormat.PreferredWidth für eine einzelne Zelle zu.


Schritt 7: Zellen zusammenführen

Markieren Sie Zellen als zusammengeführt, indem Sie CellFormat.HorizontalMerge oder CellFormat.VerticalMerge (beide vom Typ CellMerge) an den Zellen setzen, die am Merge teilnehmen sollen. Wenn Zellen nur durch Angleichen ihrer Breiten den Anschein einer Zusammenführung erweckt haben, anstatt explizit gekennzeichnet zu sein, rufen Sie Table.ConvertToHorizontallyMergedCells() auf, um diese visuelle Anordnung in Zellen mit echtem CellMerge-Zustand zu konvertieren. CellVerticalAlignment steuert, wie der Inhalt innerhalb einer Zelle vertikal ausgerichtet wird, unabhängig von einem Merge.


Schritt 8: Tabellen aus einem bestehenden Dokument lesen

Um mit bereits in einem geladenen Dokument vorhandenen Tabellen zu arbeiten, lesen Sie Body.Tables (oder die Tables-Eigenschaft bei jedem anderen Story) – ein TableCollection – anstatt neue zu erstellen. Table.Rows liefert ein RowCollection und Row.Cells liefert ein CellCollection; alle drei Sammlungsarten unterstützen Add(), Insert(), Remove(), RemoveAt(), Contains() und IndexOf() für programmgesteuerte Änderungen. Nach dem Entfernen von Zeilen oder Zellen rufen Sie Table.EnsureMinimum(), Row.EnsureMinimum() oder Cell.EnsureMinimum() auf, damit der Knoten die von Word erwartete minimale gültige Struktur beibehält – eine leere Zeile, eine leere Zelle bzw. einen leeren Absatz.

Häufige Probleme und Lösungen

Ein gespeichertes Dokument sieht fehlerhaft aus, oder es tritt ein Fehler beim Speichern auf Eine Zeile oder die Tabelle selbst wurde nie geschlossen. Immer paaren DocumentBuilder.StartTable() mit einem abschließenden EndTable(), und schließe jede Zeile mit EndRow() bevor du zur nächsten wechselst oder die Tabelle beendest.

Neue Zellen übernehmen nicht die Formatierung, die ich festgelegt habe CellFormat and RowFormat wurden geändert am DocumentBuilder nachdem die betroffenen Zellen bereits eingefügt waren. Setze DocumentBuilder.CellFormat / RowFormat bevor das InsertCell() or EndRow() Aufruf, der den Inhalt erstellt, den Sie formatiert haben möchten.

Tabelle wird nach dem Bearbeiten ihres Inhalts nicht so skaliert, wie ich es erwarte. Table.AutoFit(AutoFitBehavior) spiegelt die Tabellenstruktur nur zum Zeitpunkt des Aufrufs wider. Rufen Sie sie nach jeder strukturellen Änderung erneut auf – dem Hinzufügen oder Entfernen von Zeilen, Zellen oder Inhalten –, falls das Layout neu angepasst werden muss.

Zellen, die zusammengeführt erscheinen, verhalten sich beim Zurücklesen als separate Zellen. Die Zellen wurden nur nach Breite abgeglichen, nicht gekennzeichnet mit CellMerge. Aufruf Table.ConvertToHorizontallyMergedCells(), oder setzen CellFormat.HorizontalMerge / VerticalMerge explizit bei den Zellen, die zusammengeführt werden sollen.

Das Entfernen von Zeilen oder Zellen hinterlässt die Tabelle in einem ungültigen Zustand Word erwartet jedes Table, Row, und Cell um eine minimale gültige Struktur beizubehalten. Nachdem Inhalt programmgesteuert entfernt wurde, rufen Sie EnsureMinimum() auf dem gerade modifizierten Knoten auf.

Häufig gestellte Fragen

Wie erstelle ich eine Tabelle von Grund auf neu, anstatt eine bestehende zu bearbeiten?

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

Wie bekomme ich die Tabellen, die bereits in einem geladenen Dokument existieren?

Lesen Sie die Eigenschaft Tables (ein TableCollection) im Body des Abschnitts, an dem Sie interessiert sind, oder in jedem anderen Story wie einer Kopf- oder Fußzeile.

Wie stelle ich eine Tabelle auf einen Prozentsatz der Seitenbreite statt einer festen Breite ein?

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

Was ist der Unterschied zwischen dem Festlegen von Rahmen mit SetBorders und SetBorder?

Table.SetBorders() wendet einen Linienstil, eine Breite und eine Farbe gleichzeitig auf alle Rahmen der Tabelle an; Table.SetBorder() legt eine einzelne Seite fest, sodass verschiedene Seiten unterschiedliche Formatierungen haben können.

Wie setze ich die Formatierung einer Zelle oder Zeile zurück, bevor ich sie erneut verwende?

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

Siehe auch

 Deutsch