Cum să lucrați cu tabele în .NET

Cum să lucrați cu tabele în .NET

Acest ghid arată cum să construiești, să formatezi și să citești tabele programatic în Aspose.Words FOSS pentru .NET, utilizând Table, Row, și Cell clase în Aspose.Words.Tables spațiu de nume împreună cu DocumentBuilder. Acoperă construirea unui tabel de la zero, formatarea celulelor și a rândurilor pe măsură ce le construiești, controlul aspectului la nivel de tabel și AutoFit, stabilirea lățimilor preferate, îmbinarea celulelor și citirea tabelelor deja prezente într-un document încărcat.

Ghid pas cu pas

Pasul 1: Instalați pachetul

Aspose.Words FOSS pentru .NET nu publică încă un pachet NuGet – construiți biblioteca din sursă în schimb. Clonați https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git, apoi construiți Aspose.Words.sln în configurația Release cu SDK-ul .NET și referențiați ansamblul Aspose.Words rezultat în proiectul dumneavoastră. Biblioteca vizează .NET Standard 2.0, astfel încât rulează pe .NET Framework 4.6.2+ și .NET 6/8/10.


Pasul 2: Importați clasele necesare

Adăugați o directivă using Aspose.Words; pentru clasele de document de bază (Document, DocumentBuilder) și o directivă using Aspose.Words.Tables; pentru clasele specifice tabelului pe care le acoperă acest ghid – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth și enum-urile aferente.


Pasul 3: Construiește un tabel nou cu DocumentBuilder

Creează un Document și un DocumentBuilder legat de acesta, apoi apelează DocumentBuilder.StartTable() pentru a începe un tabel la cursor. Pentru fiecare celulă dintr-un rând, apelează DocumentBuilder.InsertCell(), apoi închide rândul cu DocumentBuilder.EndRow(). Repetă pentru atât de multe rânduri cât are nevoie tabelul și închide întregul tabel cu DocumentBuilder.EndTable(). Fiecare StartTable() are nevoie de un EndTable() corespunzător, și fiecare rând are nevoie de un EndRow() corespunzător, altfel starea internă a constructorului — și arborele rezultat al documentului — devine malformat.


Pasul 4: Formatează celulele și rândurile în timp ce le construiești

Setează DocumentBuilder.CellFormat și DocumentBuilder.RowFormat înainte de a apela InsertCell() sau EndRow() pentru a aplica formatarea celulelor și rândurilor pe care constructorul urmează să le creeze — aceste două proprietăți acționează ca un șablon pentru conținut nou, nu ca o modificare retroactivă a celulelor deja inserate. CellFormat expune Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth și cele patru proprietăți de spațiere (LeftPadding, RightPadding, TopPadding, BottomPadding), care pot fi setate simultan cu SetPaddings(). RowFormat expune Borders, Height, HeightRule, AllowBreakAcrossPages și HeadingFormat. Apelează CellFormat.ClearFormatting() sau RowFormat.ClearFormatting() pentru a reseta oricare dintre ele la valorile implicite înainte de a seta noi valori pentru următorul rând sau celulă.


Pasul 5: Setează aspectul la nivel de tabel și AutoFit

Odată ce tabelul există, setează proprietățile de aspect direct pe obiectul Table: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions) și TextWrapping. Apelează Table.SetBorders() pentru a aplica un stil de bordură, lățime și culoare pe întregul tabel, sau Table.SetBorder() pentru a seta o singură parte; ClearBorders() și ClearShading() le resetează. Table.AutoFit(AutoFitBehavior) redimensionează tabelul și celulele sale conform comportamentului ales — apeleaz-o din nou după orice editare structurală, deoarece reflectă starea tabelului doar în momentul execuției, nu continuu.


Pasul 6: Setează lățimile preferate și ale celulelor

Creează valori de lățime cu metodele de fabrică statice PreferredWidth.FromPercent() pentru un aspect care se adaptează la lățimea paginii disponibile, sau PreferredWidth.FromPoints() pentru o lățime fixă; PreferredWidthType raportează ce tip de valoare (Auto, Percent sau Points) conține un anumit PreferredWidth. Atribuie rezultatul fie lui Table.PreferredWidth pentru întregul tabel, fie lui CellFormat.PreferredWidth pentru o singură celulă.


Pasul 7: Îmbină celulele

Marcați celulele ca îmbinate setând CellFormat.HorizontalMerge sau CellFormat.VerticalMerge (ambele tastate CellMerge) pe celulele care ar trebui să participe la îmbinare. Dacă celulele au fost doar făcute să pară îmbinate prin potrivirea lățimilor lor în loc să fie marcate explicit, apelați Table.ConvertToHorizontallyMergedCells() pentru a converti acea aranjare vizuală în celule cu stare reală de CellMerge. CellVerticalAlignment controlează modul în care conținutul este aliniat vertical în interiorul unei celule, independent de orice îmbinare.


Pasul 8: Citește tabelele dintr-un document existent

Pentru a lucra cu tabelele deja existente într-un document încărcat, citiți Body.Tables (sau proprietatea Tables pe orice alt Story) – un TableCollection – în loc să construiți altele noi. Table.Rows returnează un RowCollection și Row.Cells returnează un CellCollection; toate cele trei tipuri de colecții suportă Add(), Insert(), Remove(), RemoveAt(), Contains() și IndexOf() pentru editări programatice. După ce eliminați rânduri sau celule, apelați Table.EnsureMinimum(), Row.EnsureMinimum() sau Cell.EnsureMinimum() pentru ca nodul să păstreze structura minimă validă pe care Word o așteaptă – un rând gol, o celulă goală sau un paragraf gol, respectiv.

Probleme comune și soluții

Un document salvat arată deformat, sau apare o eroare în timpul salvării Un rând sau tabelul în sine nu a fost niciodată închis. Întotdeauna împerechează DocumentBuilder.StartTable() cu un final EndTable(), și închide fiecare rând cu EndRow() înainte de a trece la următorul sau de a încheia tabelul.

Celulele noi nu preiau formatarea pe care am setat-o CellFormat and RowFormat au fost modificate pe DocumentBuilder după ce celulele afectate fuseseră deja inserate. Set DocumentBuilder.CellFormat / RowFormat înainte de InsertCell() or EndRow() apel care creează conținutul pe care doriți să fie formatat.

Tabelul nu se redimensionează așa cum mă aștept după ce editez conținutul său Table.AutoFit(AutoFitBehavior) reflectă structura tabelului doar în momentul în care este apelat. Apelați-l din nou după orice editare structurală – adăugarea sau eliminarea de rânduri, celule sau conținut – dacă aspectul trebuie ajustat din nou.

Celulele care par îmbinate se comportă ca celule separate când sunt citite din nou Celulele au fost potrivite doar după lățime, nu au fost marcate cu CellMerge. Apel Table.ConvertToHorizontallyMergedCells(), sau setează CellFormat.HorizontalMerge / VerticalMerge explicit pe celulele care trebuie să se îmbine.

Înlăturarea rândurilor sau celulelor lasă tabelul într-o stare invalidă Word se așteaptă ca fiecare Table, Row, și Cell să păstreze o structură validă minimă. După ce eliminați conținutul programatic, apelați EnsureMinimum() pe nodul tocmai modificat.

Întrebări frecvente

Cum pot crea un tabel de la zero în loc să editez unul existent?

Folosește DocumentBuilder: apelează StartTable(), apoi InsertCell() pentru fiecare celulă dintr-un rând, EndRow() pentru a închide rândul, repetă pentru rânduri suplimentare și EndTable() pentru a închide tabelul.

Cum pot obține tabelele care există deja într-un document încărcat?

Citește proprietatea Tables (un TableCollection) pe Body secțiunii care te interesează, sau pe orice alt Story cum ar fi un antet sau un subsol.

Cum pot seta un tabel la un procent din lățimea paginii în loc de o lățime fixă?

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

Care este diferența dintre setarea bordurilor cu SetBorders și SetBorder?

Table.SetBorders() aplică un stil de linie, lățime și culoare fiecărui chenar din tabel simultan; Table.SetBorder() stabilește o singură parte, permițând diferitelor părți să aibă formatare diferită.

Cum pot reseta formatarea pe o celulă sau un rând înainte de a o reutiliza?

Apelați CellFormat.ClearFormatting() pe CellFormat celulei, sau RowFormat.ClearFormatting() pe RowFormat rândului.

Vezi și:

 Română