Práce s tabulkami

Práce s tabulkami

Tabulky v Aspose.Words FOSS pro .NET jsou reprezentovány Aspose.Words.Tables jmenným prostorem: Table, Row, a Cell vytvářejí trojúrovňovou kompozitní uzlovou hierarchii, která se nachází ve stromu dokumentu vedle odstavců. Tato stránka se zabývá tvorbou tabulek s DocumentBuilder, formátováním řádků a buněk, řízením celkové struktury tabulky a slučováním buněk.


Objektový model tabulky

Table je CompositeNode obsahující uzly Row, a každý Row je CompositeNode obsahující uzly Cell; Cell naopak obsahuje odstavce a případně vnořené tabulky. Table.Rows vrací RowCollection, Row.Cells vrací CellCollection a Body nebo jiný Story odhaluje každou tabulku nejvyšší úrovně v něm prostřednictvím své vlastnosti Tables, což je TableCollection. Všechny tři kolekce podporují Add(), Insert(), Remove(), RemoveAt(), Contains() a IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() a Cell.EnsureMinimum() každý doplňuje nejmenší platný obsah, který uzel tohoto typu potřebuje (prázdný řádek, prázdnou buňku nebo prázdný odstavec, respektive) poté, co programové úpravy zanechají jeden bez něj.


Vytváření tabulek pomocí DocumentBuilder

DocumentBuilder.StartTable() zahajuje novou tabulku na pozici kurzoru, InsertCell() přidá buňku do aktuálního řádku, EndRow() uzavře aktuální řádek a EndTable() uzavře tabulku. Nastavte DocumentBuilder.CellFormat a DocumentBuilder.RowFormat před voláním InsertCell() nebo EndRow(), aby se na buňky a řádky aplikovalo výchozí formátování při jejich vytváření – tyto vlastnosti fungují jako šablona pro obsah, který tvůrce vloží dál, nikoli jako retroaktivní změna buněk již v dokumentu.


Formátování buněk a řádků

Cell.CellFormat je CellFormat instance (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) s ClearFormatting() pro resetování a SetPaddings() pro nastavení všech čtyř výplní buňky najednou. Row.RowFormat je RowFormat instance (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) s vlastní ClearFormatting().


Formátování celé tabulky a AutoFit

Table sám vystavuje vlastnosti rozvržení – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping a metadata přístupnosti prostřednictvím Title a Description. Table.AutoFit(AutoFitBehavior) mění velikost tabulky a jejích buněk podle daného chování. SetBorder() nastaví jednu stranu okraje a SetBorders() nastaví každý okraj na stejný styl čáry, šířku a barvu po celé tabulce; ClearBorders() a ClearShading() je resetují. ConvertToHorizontallyMergedCells() převádí buňky, které byly sloučeny podle shodné šířky, na buňky, které jsou explicitně označeny pomocí HorizontalMerge.


Preferované a šířky buněk

PreferredWidth představuje šířku a její jednotku, vytvořenou pomocí statických továrních metod PreferredWidth.FromPercent() nebo PreferredWidth.FromPoints(); PreferredWidthType určuje, jaký typ hodnoty (Auto, Percent nebo Points) daný PreferredWidth obsahuje. Jak Table.PreferredWidth, tak CellFormat.PreferredWidth tyto hodnoty přijímají.


Sloučené buňky

CellFormat.HorizontalMerge a CellFormat.VerticalMerge (CellMerge) označují, jak buňka participuje na horizontálním nebo vertikálním sloučení se svými sousedy. CellVerticalAlignment řídí, jak je obsah ve buňce vertikálně zarovnán, nezávisle na jakémkoli stavu sloučení.


Tipy a osvědčené postupy

  • Uzavřete každý StartTable() odpovídajícím EndRow() v každém řádku a závěrečným EndTable() – neuzavřený řádek nebo tabulka zanechává vnitřní stav tvůrce (a výsledný strom dokumentu) poškozený.
  • Nastavte DocumentBuilder.CellFormat a DocumentBuilder.RowFormat před každým voláním InsertCell() nebo EndRow(), pokud různé řádky nebo buňky ve stejné tabulce vyžadují odlišné formátování; tvůrce použije to, co je v daném okamžiku nastaveno.
  • Po programatickém odstranění obsahu zavolejte Table.EnsureMinimum(), Row.EnsureMinimum() nebo Cell.EnsureMinimum(), aby uzel zachoval minimální platnou strukturu, kterou Word očekává.
  • Použijte PreferredWidth.FromPercent() pro tabulky, které se mají přizpůsobit dostupné šířce stránky, a PreferredWidth.FromPoints() pro pevnou šířku rozvržení.
  • AutoFitBehavior se použije, když zavoláte Table.AutoFit() – nespouští se průběžně při přidávání nebo odstraňování obsahu, takže jej zavolejte znovu po významných úpravách, pokud potřebujete tabulku znovu přizpůsobit.

Časté problémy

ProblémPříčinaOprava
Tabulka vypadá poškozeně nebo hází výjimku při uloženíŘádek nebo tabulka nebyly nikdy uzavřeny pomocí EndRow() / EndTable()Vždy spárujte StartTable() s konečným EndTable() a uzavřete každý řádek pomocí EndRow()
Nové buňky nepřebírají formátování, které jsem nastavilCellFormat / RowFormat byly změněny v builderu po tom, co byly buňky již vloženyNastavte DocumentBuilder.CellFormat / RowFormat před voláním InsertCell() / EndRow() pro tento obsah
Tabulka se po úpravách nezmění velikost tak, jak očekávámAutoFit() odráží stav tabulky v okamžiku, kdy je zavoláno, nikoli průběžněZavolejte Table.AutoFit(AutoFitBehavior) znovu po strukturálních úpravách
Sousední buňky, které vypadají jako sloučené, se chovají jako samostatné buňkyBuňky byly spárovány pouze podle šířky, nikoli označeny pomocí CellMergeZavolejte Table.ConvertToHorizontallyMergedCells(), nebo nastavte CellFormat.HorizontalMerge / VerticalMerge explicitně

FAQ

Jak vytvořit tabulku od nuly s pomocí DocumentBuilder?

Zavolejte StartTable(), poté InsertCell() pro každou buňku v řádku, EndRow() pro uzavření řádku, opakujte pro další řádky a nakonec EndTable() pro uzavření tabulky.

Jak nastavit šířku tabulky v procentech místo pevné šířky?

Přiřaďte Table.PreferredWidth = PreferredWidth.FromPercent(value) místo PreferredWidth.FromPoints(value).

Jak resetovat veškeré formátování buňky nebo řádku?

Zavolejte CellFormat.ClearFormatting() na CellFormat buňky, nebo RowFormat.ClearFormatting() na RowFormat řádku.

Jak nastavit okraje a stínování celé tabulky najednou?

Použijte Table.SetBorders() pro jednotný okraj na všech stranách, Table.SetBorder() pro jednu stranu najednou a Table.SetShading() pro jednotné stínování; ClearBorders() a ClearShading() je resetují.


API Reference Shrnutí

Třída / Výčtový typPopis:
TableUzel tabulky; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowUzel řádku tabulky; Cells, RowFormat, EnsureMinimum()
CellUzlu buňky tabulky; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionTypované kolekce uzlů Table / Row / Cell
CellFormatFormátování buňky: okraje, stínování, výplň, stav sloučení, vertikální zarovnání
RowFormatFormátování řádku: okraje, výška, chování při přerušení stránky
PreferredWidth / PreferredWidthTypeHodnota šířky tabulky nebo buňky a její jednotka (auto, procenta, body)
AutoFitBehaviorJak Table.AutoFit() mění velikost tabulky a jejích buněk
CellMerge / CellVerticalAlignmentStav vodorovného/svislého sloučení buněk a svislé zarovnání obsahu
TableAlignment / TableStyleOptions / TextWrappingZarovnání na úrovni celé tabulky, aplikace stylu a chování zalamování textu
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableKonstrukce tabulky na základě kurzoru

Viz také:

 Čeština