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 unEndRow()corespunzător pe rând și unEndTable()final – un rând sau tabel neînchis lasă starea internă a constructorului (și arborele rezultat al documentului) deformat. - Setează
DocumentBuilder.CellFormatșiDocumentBuilder.RowFormatînainte de fiecare apelInsertCell()sauEndRow()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()sauCell.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 șiPreferredWidth.FromPoints()pentru o lățime fixă a aspectului. AutoFitBehaviorse aplică când apeleziTable.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 salvare | Un 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-o | CellFormat / RowFormat au fost modificate în constructor după ce celulele au fost deja inserate | Setează 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ări | AutoFit() reflectă starea tabelului în momentul în care este apelat, nu continuu | Apelează Table.AutoFit(AutoFitBehavior) din nou după editări structurale |
| Celulele adiacente care par fuzionate se comportă ca celule separate | Celulele au fost potrivite doar după lățime, nu marcate cu CellMerge | Apelează 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ă / Enum | Descriere: |
|---|---|
Table | Nod tabel; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Nod rând tabel; Cells, RowFormat, EnsureMinimum() |
Cell | Nod celulă tabel; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Colecții tipizate de noduri Table / Row / Cell nodes |
CellFormat | Formatare pe celulă: margini, umbrire, spațiere, stare de îmbinare, aliniere verticală |
RowFormat | Formatare pe rând: margini, înălțime, comportament la întreruperea paginii |
PreferredWidth / PreferredWidthType | Valoarea lățimii tabelului sau a celulei și unitatea acesteia (auto, procente, puncte) |
AutoFitBehavior | Cum Table.AutoFit() redimensionează un tabel și celulele sale |
CellMerge / CellVerticalAlignment | Stare de fuziune a celulelor orizontale/verticale și aliniere verticală a conținutului |
TableAlignment / TableStyleOptions / TextWrapping | Aliniere la nivelul întregului tabel, aplicare de stil și comportament de încadrare a textului |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Construcție de tabel bazată pe cursor |