Praca z tabelami

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() dopasowanym EndRow() w każdym wierszu oraz końcowy EndTable() – niezamknięty wiersz lub tabela pozostawia wewnętrzny stan konstruktora (i wynikowe drzewo dokumentu) w nieprawidłowej formie.
  • Ustaw DocumentBuilder.CellFormat i DocumentBuilder.RowFormat przed każdym wywołaniem InsertCell() lub EndRow(), 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() lub Cell.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, oraz PreferredWidth.FromPoints() dla stałej szerokości układu.
  • AutoFitBehavior jest stosowane, gdy wywołujesz Table.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

ProblemPrzyczynaNaprawa
Tabela wygląda na niepoprawną lub powoduje błąd podczas zapisywaniaWiersz 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 formatowaniaCellFormat / RowFormat zostały zmienione w kreatorze po wstawieniu komórekUstaw DocumentBuilder.CellFormat / RowFormat przed wywołaniem InsertCell() / EndRow() dla tej treści
Tabela nie zmienia rozmiaru tak, jak się spodziewam po edycjachAutoFit() odzwierciedla stan tabeli w momencie wywołania, a nie ciągleWywoł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órkiKomórki były dopasowane tylko według szerokości, a nie oznaczone CellMergeWywoł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 / EnumOpis
TableWęzeł tabeli; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowWęzeł wiersza tabeli; Cells, RowFormat, EnsureMinimum()
CellWęzeł komórki tabeli; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionTypowane kolekcje węzłów Table / Row / Cell
CellFormatFormatowanie komórek: krawędzie, cieniowanie, odstępy, stan scalania, wyrównanie pionowe
RowFormatFormatowanie wierszy: krawędzie, wysokość, zachowanie podziału strony
PreferredWidth / PreferredWidthTypeWartość szerokości tabeli lub komórki oraz jej jednostka (auto, procent, punkty)
AutoFitBehaviorJak Table.AutoFit() zmienia rozmiar tabeli i jej komórek
CellMerge / CellVerticalAlignmentStan scalania komórek w poziomie/pionie oraz pionowe wyrównanie treści
TableAlignment / TableStyleOptions / TextWrappingWyrównanie w całej tabeli, zastosowanie stylu i zachowanie zawijania tekstu
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableBudowanie tabeli oparte na kursorze

Zobacz także

 Polski