Praca z tabelami
Praca z tabelami
Tabele w Aspose.Words FOSS dla .NET są reprezentowane przez Aspose.Words.Tables przestrzeń nazw: Table, Row, oraz Cell tworzą trójpoziomową hierarchię węzłów złożonych, która znajduje się w drzewie dokumentu obok akapitów. Ta strona opisuje tworzenie tabel z DocumentBuilder, formatowaniem wierszy i komórek, kontrolowaniem układu całej tabeli oraz scalaniem komórek.
Model obiektowy tabeli
A Table jest CompositeNode zawierającym węzły Row, a każdy Row jest CompositeNode zawierającym węzły Cell; Cell z kolei zawiera akapity i ewentualnie zagnieżdżone tabele. Table.Rows zwraca RowCollection, Row.Cells zwraca CellCollection, a Body lub inny Story udostępnia każdą tabelę najwyższego poziomu poprzez swoją właściwość Tables, czyli TableCollection. Wszystkie trzy kolekcje obsługują Add(), Insert(), Remove(), RemoveAt(), Contains() i IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() i Cell.EnsureMinimum() wypełniają odpowiednio najmniejszą wymaganą treść dla węzła tego typu (pusty wiersz, pusta komórka lub pusty akapit) po tym, jak programowe edycje pozostawią go bez takiej treści.
Tworzenie tabel przy użyciu DocumentBuilder
DocumentBuilder.StartTable() rozpoczyna nową tabelę w miejscu kursora, InsertCell() dodaje komórkę do bieżącego wiersza, EndRow() zamyka bieżący wiersz, a EndTable() zamyka tabelę. Ustaw DocumentBuilder.CellFormat i DocumentBuilder.RowFormat przed wywołaniem InsertCell() lub EndRow(), aby zastosować domyślne formatowanie komórek i wierszy w momencie ich tworzenia — właściwości te działają jako szablon dla treści, które builder wstawia następnie, a nie jako zmiana retrospektywna dla już istniejących w dokumencie komórek.
Formatowanie komórek i wierszy
Cell.CellFormat jest instancją CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) z ClearFormatting() do jej zresetowania oraz SetPaddings() do jednoczesnego ustawienia wszystkich czterech wypełnień komórek. Row.RowFormat jest instancją RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) z własnym ClearFormatting().
Formatowanie na poziomie całej tabeli i AutoFit
Table sam udostępnia właściwości układu — Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping oraz metadane dostępności poprzez Title i Description. Table.AutoFit(AutoFitBehavior) zmienia rozmiar tabeli i jej komórek zgodnie z określonym zachowaniem. SetBorder() ustawia jedną stronę obramowania, a SetBorders() ustawia wszystkie obramowania na ten sam styl linii, szerokość i kolor w całej tabeli; ClearBorders() i ClearShading() resetują je. ConvertToHorizontallyMergedCells() konwertuje komórki, które zostały scalone przez dopasowanie szerokości, na komórki wyraźnie oznaczone HorizontalMerge.
Preferowane i szerokości komórek
PreferredWidth reprezentuje szerokość i jej jednostkę, utworzoną przy użyciu statycznych metod fabrycznych PreferredWidth.FromPercent() lub PreferredWidth.FromPoints(); PreferredWidthType określa, jaki rodzaj wartości (Auto, Percent lub Points) zawiera dany PreferredWidth. Zarówno Table.PreferredWidth, jak i CellFormat.PreferredWidth akceptują te wartości.
Scalane komórki
CellFormat.HorizontalMerge i CellFormat.VerticalMerge (CellMerge) określają, w jaki sposób komórka uczestniczy w poziomym lub pionowym scalaniu z sąsiadami. CellVerticalAlignment kontroluje, jak treść jest wyrównana w pionie w komórce, niezależnie od stanu scalania.
Wskazówki i najlepsze praktyki
- Zamknij każdy
StartTable()dopasowanymEndRow()w każdym wierszu oraz końcowyEndTable()– niezamknięty wiersz lub tabela pozostawia wewnętrzny stan konstruktora (i wynikowe drzewo dokumentu) w nieprawidłowej formie. - Ustaw
DocumentBuilder.CellFormatiDocumentBuilder.RowFormatprzed każdym wywołaniemInsertCell()lubEndRow(), jeśli różne wiersze lub komórki w tej samej tabeli wymagają innego formatowania; konstruktor stosuje to, co jest aktualnie ustawione w momencie wstawiania. - Wywołaj
Table.EnsureMinimum(),Row.EnsureMinimum()lubCell.EnsureMinimum()po programowym usunięciu zawartości, aby węzeł zachował minimalną prawidłową strukturę, jakiej oczekuje Word. - Użyj
PreferredWidth.FromPercent()dla tabel, które mają dopasowywać się do dostępnej szerokości strony, orazPreferredWidth.FromPoints()dla stałej szerokości układu. AutoFitBehaviorjest stosowane, gdy wywołujeszTable.AutoFit()– nie jest uruchamiane ciągle podczas dodawania lub usuwania treści, więc wywołaj je ponownie po znaczących zmianach, jeśli potrzebujesz ponownego dopasowania tabeli.
Częste problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Tabela wygląda na niepoprawną lub powoduje błąd podczas zapisywania | Wiersz lub tabela nie zostały nigdy zamknięte przy użyciu EndRow() / EndTable() | Zawsze łącz StartTable() z końcowym EndTable() i zamykaj każdy wiersz przy pomocy EndRow() |
| Nowe komórki nie przejmują ustawionego przeze mnie formatowania | CellFormat / RowFormat zostały zmienione w kreatorze po wstawieniu komórek | Ustaw DocumentBuilder.CellFormat / RowFormat przed wywołaniem InsertCell() / EndRow() dla tej treści |
| Tabela nie zmienia rozmiaru tak, jak się spodziewam po edycjach | AutoFit() odzwierciedla stan tabeli w momencie wywołania, a nie ciągle | Wywołaj Table.AutoFit(AutoFitBehavior) ponownie po zmianach strukturalnych |
| Sąsiadujące komórki, które wyglądają na połączone, zachowują się jako oddzielne komórki | Komórki były dopasowane tylko według szerokości, a nie oznaczone CellMerge | Wywołaj Table.ConvertToHorizontallyMergedCells(), albo ustaw CellFormat.HorizontalMerge / VerticalMerge jawnie |
FAQ
Jak zbudować tabelę od podstaw przy użyciu DocumentBuilder?
Wywołaj StartTable(), następnie InsertCell() dla każdej komórki w wierszu, EndRow() aby zamknąć wiersz, powtórz dla kolejnych wierszy i w końcu EndTable() aby zamknąć tabelę.
Jak ustawić szerokość tabeli w procentach zamiast stałej szerokości?
Przypisz Table.PreferredWidth = PreferredWidth.FromPercent(value) zamiast PreferredWidth.FromPoints(value).
Jak zresetować całe formatowanie w komórce lub wierszu?
Wywołaj CellFormat.ClearFormatting() na CellFormat komórki, lub RowFormat.ClearFormatting() na RowFormat wiersza.
Jak ustawić obramowania i cieniowanie dla całej tabeli jednocześnie?
Użyj Table.SetBorders() dla jednolitego obramowania po każdej stronie, Table.SetBorder() dla jednej strony naraz oraz Table.SetShading() dla jednolitego cieniowania; ClearBorders() i ClearShading() resetują je.
API Reference Podsumowanie
| Klasa / Enum | Opis |
|---|---|
Table | Węzeł tabeli; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Węzeł wiersza tabeli; Cells, RowFormat, EnsureMinimum() |
Cell | Węzeł komórki tabeli; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Typowane kolekcje węzłów Table / Row / Cell |
CellFormat | Formatowanie komórek: krawędzie, cieniowanie, odstępy, stan scalania, wyrównanie pionowe |
RowFormat | Formatowanie wierszy: krawędzie, wysokość, zachowanie podziału strony |
PreferredWidth / PreferredWidthType | Wartość szerokości tabeli lub komórki oraz jej jednostka (auto, procent, punkty) |
AutoFitBehavior | Jak Table.AutoFit() zmienia rozmiar tabeli i jej komórek |
CellMerge / CellVerticalAlignment | Stan scalania komórek w poziomie/pionie oraz pionowe wyrównanie treści |
TableAlignment / TableStyleOptions / TextWrapping | Wyrównanie w całej tabeli, zastosowanie stylu i zachowanie zawijania tekstu |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Budowanie tabeli oparte na kursorze |