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ímEndRow()v každém řádku a závěrečnýmEndTable()– neuzavřený řádek nebo tabulka zanechává vnitřní stav tvůrce (a výsledný strom dokumentu) poškozený. - Nastavte
DocumentBuilder.CellFormataDocumentBuilder.RowFormatpřed každým volánímInsertCell()neboEndRow(), 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()neboCell.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, aPreferredWidth.FromPoints()pro pevnou šířku rozvržení. AutoFitBehaviorse použije, když zavoláteTable.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ém | Příčina | Oprava |
|---|---|---|
| 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 nastavil | CellFormat / RowFormat byly změněny v builderu po tom, co byly buňky již vloženy | Nastavte 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ám | AutoFit() 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ňky | Buňky byly spárovány pouze podle šířky, nikoli označeny pomocí CellMerge | Zavolejte 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ý typ | Popis: |
|---|---|
Table | Uzel tabulky; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Uzel řádku tabulky; Cells, RowFormat, EnsureMinimum() |
Cell | Uzlu buňky tabulky; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Typované kolekce uzlů Table / Row / Cell |
CellFormat | Formátování buňky: okraje, stínování, výplň, stav sloučení, vertikální zarovnání |
RowFormat | Formátování řádku: okraje, výška, chování při přerušení stránky |
PreferredWidth / PreferredWidthType | Hodnota šířky tabulky nebo buňky a její jednotka (auto, procenta, body) |
AutoFitBehavior | Jak Table.AutoFit() mění velikost tabulky a jejích buněk |
CellMerge / CellVerticalAlignment | Stav vodorovného/svislého sloučení buněk a svislé zarovnání obsahu |
TableAlignment / TableStyleOptions / TextWrapping | Zarovnání na úrovni celé tabulky, aplikace stylu a chování zalamování textu |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Konstrukce tabulky na základě kurzoru |