Lucrul cu tabele

Lucrul cu tabele

Lucrul cu tabele

Tabele în Aspose.Words FOSS pentru .NET sunt reprezentate de Aspose.Words.Tables spațiu de nume: Table, Row, și Cell formează o ierarhie compusă din trei niveluri de noduri care se află în arborele documentului alături de paragrafe. Această pagină acoperă crearea de tabele cu DocumentBuilder, formatarea rândurilor și celulelor, controlul aspectului la nivel de tabel și îmbinarea celulelor.


Modelul de obiect al tabelului

Un Table este un CompositeNode care conține noduri Row, și fiecare Row este un CompositeNode care conține noduri Cell; un Cell la rândul său conține paragrafe și, eventual, tabele imbricate. Table.Rows returnează un RowCollection, Row.Cells returnează un CellCollection, și un Body sau alt Story expune fiecare tabel de nivel superior din el prin proprietatea sa Tables, un TableCollection. Cele trei colecții susțin Add(), Insert(), Remove(), RemoveAt(), Contains() și IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() și Cell.EnsureMinimum() fiecare completează cel mai mic conținut valid de care are nevoie un nod de acel tip (un rând gol, o celulă goală sau un paragraf gol, respectiv) după ce editările programatice lasă unul fără acesta.


Construirea tabelelor cu DocumentBuilder

DocumentBuilder.StartTable() începe un tabel nou la cursor, InsertCell() adaugă o celulă la rândul curent, EndRow() închide rândul curent și EndTable() închide tabelul. Setează DocumentBuilder.CellFormat și DocumentBuilder.RowFormat înainte de a apela InsertCell() sau EndRow() pentru a aplica formatarea implicită celulelor și rândurilor pe măsură ce sunt create — aceste proprietăți acționează ca un șablon pentru conținutul pe care constructorul îl inserează în continuare, nu ca o modificare retroactivă a celulelor deja din document.


Formatarea celulelor și a rândurilor

Cell.CellFormat este o instanță CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) cu ClearFormatting() pentru a o reseta și SetPaddings() pentru a seta toate cele patru spațieri ale celulei simultan. Row.RowFormat este o instanță RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) cu propriul său ClearFormatting().


Formatare la nivelul întregului tabel și AutoFit

Table în sine expune proprietăți de aspect – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, și metadate de accesibilitate prin Title și Description. Table.AutoFit(AutoFitBehavior) redimensionează tabelul și celulele sale conform comportamentului specificat. SetBorder() setează o singură parte a bordurii și SetBorders() setează fiecare bordură la același stil de linie, lățime și culoare în întregul tabel; ClearBorders() și ClearShading() le resetează. ConvertToHorizontallyMergedCells() convertește celulele care au fost fuzionate prin potrivirea lățimii în celule care sunt marcate explicit cu HorizontalMerge.


Lățimi preferate și ale celulelor

PreferredWidth reprezintă o lățime și unitatea ei, creată cu metodele de fabrică statice PreferredWidth.FromPercent() sau PreferredWidth.FromPoints(); PreferredWidthType identifică ce tip de valoare (Auto, Percent sau Points) deține un anumit PreferredWidth. Atât Table.PreferredWidth, cât și CellFormat.PreferredWidth acceptă aceste valori.


Celule fuzionate

CellFormat.HorizontalMerge și CellFormat.VerticalMerge (CellMerge) marchează modul în care o celulă participă la o fuziune orizontală sau verticală cu vecinii săi. CellVerticalAlignment controlează modul în care conținutul este aliniat vertical în interiorul unei celule, independent de orice stare de fuziune.


Sfaturi și cele mai bune practici

  • Închide fiecare StartTable() cu un EndRow() corespunzător pe rând și un EndTable() final – un rând sau tabel neînchis lasă starea internă a constructorului (și arborele rezultat al documentului) deformat.
  • Setează DocumentBuilder.CellFormat și DocumentBuilder.RowFormat înainte de fiecare apel InsertCell() sau EndRow() dacă rânduri sau celule diferite din același tabel necesită formatare diferită; constructorul aplică ceea ce este setat în acel moment al inserării.
  • Apelează Table.EnsureMinimum(), Row.EnsureMinimum() sau Cell.EnsureMinimum() după ce elimini conținutul programatic, pentru ca nodul să păstreze structura minimă validă pe care o așteaptă Word.
  • Folosește PreferredWidth.FromPercent() pentru tabelele care trebuie să se adapteze la lățimea disponibilă a paginii și PreferredWidth.FromPoints() pentru o lățime fixă a aspectului.
  • AutoFitBehavior se aplică când apelezi Table.AutoFit() – nu se reexecută continuu pe măsură ce adaugi sau elimini conținut, așa că apeleaz-o din nou după editări semnificative dacă ai nevoie ca tabelul să fie reîncadrat.

Probleme comune

ProblemăCauzăRemediere
Tabelul pare deformat sau aruncă o eroare la salvareUn rând sau tabelul nu a fost niciodată închis cu EndRow() / EndTable()Întotdeauna asociază StartTable() cu un EndTable() final și închide fiecare rând cu EndRow()
Celulele noi nu preiau formatarea pe care am setat-oCellFormat / RowFormat au fost modificate în constructor după ce celulele au fost deja inserateSetează DocumentBuilder.CellFormat / RowFormat înainte de a apela InsertCell() / EndRow() pentru acel conținut
Tabelul nu se redimensionează așa cum mă aștept după edităriAutoFit() reflectă starea tabelului în momentul în care este apelat, nu continuuApelează Table.AutoFit(AutoFitBehavior) din nou după editări structurale
Celulele adiacente care par fuzionate se comportă ca celule separateCelulele au fost potrivite doar după lățime, nu marcate cu CellMergeApelează Table.ConvertToHorizontallyMergedCells(), sau setează explicit CellFormat.HorizontalMerge / VerticalMerge

FAQ

Cum pot construi un tabel de la zero cu DocumentBuilder?

Apelaţi StartTable(), apoi InsertCell() pentru fiecare celulă dintr-un rând, EndRow() pentru a închide rândul, repetaţi pentru rânduri suplimentare și, în final, EndTable() pentru a închide tabelul.

Cum pot seta lățimea tabelului în procente în loc de o lățime fixă?

Atribuiţi Table.PreferredWidth = PreferredWidth.FromPercent(value) în loc de PreferredWidth.FromPoints(value).

Cum pot reseta toată formatarea pe o celulă sau pe un rând?

Apelaţi CellFormat.ClearFormatting() pe CellFormat unei celule, sau RowFormat.ClearFormatting() pe RowFormat unui rând.

Cum pot seta bordurile și umbrirea pentru întregul tabel simultan?

Folosiţi Table.SetBorders() pentru un chenar uniform pe toate laturile, Table.SetBorder() pentru o singură parte odată, și Table.SetShading() pentru umbrire uniformă; ClearBorders() și ClearShading() le resetează.


API Reference Rezumat

Clasă / EnumDescriere:
TableNod tabel; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowNod rând tabel; Cells, RowFormat, EnsureMinimum()
CellNod celulă tabel; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionColecții tipizate de noduri Table / Row / Cell nodes
CellFormatFormatare pe celulă: margini, umbrire, spațiere, stare de îmbinare, aliniere verticală
RowFormatFormatare pe rând: margini, înălțime, comportament la întreruperea paginii
PreferredWidth / PreferredWidthTypeValoarea lățimii tabelului sau a celulei și unitatea acesteia (auto, procente, puncte)
AutoFitBehaviorCum Table.AutoFit() redimensionează un tabel și celulele sale
CellMerge / CellVerticalAlignmentStare de fuziune a celulelor orizontale/verticale și aliniere verticală a conținutului
TableAlignment / TableStyleOptions / TextWrappingAliniere la nivelul întregului tabel, aplicare de stil și comportament de încadrare a textului
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableConstrucție de tabel bazată pe cursor

Vezi și:

 Română