Lavorare con le tabelle

Lavorare con le tabelle

Lavorare con le tabelle

Tabelle in Aspose.Words FOSS per .NET sono rappresentate da Aspose.Words.Tables namespace: Table, Row, e Cell formano una gerarchia di nodi compositi a tre livelli che si trova nell’albero del documento accanto ai paragrafi. Questa pagina descrive la creazione di tabelle con DocumentBuilder, formattazione di righe e celle, controllo del layout dell’intera tabella e unione delle celle.


Il modello di oggetto tabella

Un Table è un CompositeNode che contiene nodi Row, e ogni Row è un CompositeNode che contiene nodi Cell; a sua volta, un Cell contiene paragrafi e, potenzialmente, tabelle annidate. Table.Rows restituisce un RowCollection, Row.Cells restituisce un CellCollection, e un Body o altro Story espone ogni tabella di livello superiore al suo interno attraverso la proprietà Tables, un TableCollection. Tutte e tre le collezioni supportano Add(), Insert(), Remove(), RemoveAt(), Contains() e IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() e Cell.EnsureMinimum() inseriscono ciascuno il contenuto valido più piccolo di cui un nodo di quel tipo ha bisogno (una riga vuota, una cella vuota o un paragrafo vuoto, rispettivamente) dopo che modifiche programmatiche ne hanno lasciato uno senza.


Creare tabelle con DocumentBuilder

DocumentBuilder.StartTable() avvia una nuova tabella al cursore, InsertCell() aggiunge una cella alla riga corrente, EndRow() chiude la riga corrente e EndTable() chiude la tabella. Imposta DocumentBuilder.CellFormat e DocumentBuilder.RowFormat prima di chiamare InsertCell() o EndRow() per applicare la formattazione predefinita a celle e righe mentre vengono create — queste proprietà fungono da modello per il contenuto che il costruttore inserirà successivamente, non da modifica retroattiva alle celle già presenti nel documento.


Formattazione di celle e righe

Cell.CellFormat è un’istanza CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) con ClearFormatting() per reimpostarla e SetPaddings() per impostare tutti e quattro i padding delle celle in una volta. Row.RowFormat è un’istanza RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) con il proprio ClearFormatting().


Formattazione a livello di tabella e AutoFit

Table espone direttamente le proprietà di layout – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, e i metadati di accessibilità tramite Title e Description. Table.AutoFit(AutoFitBehavior) ridimensiona la tabella e le sue celle in base al comportamento specificato. SetBorder() imposta un lato del bordo e SetBorders() imposta tutti i bordi con lo stesso stile di linea, larghezza e colore su tutta la tabella; ClearBorders() e ClearShading() li reimpostano. ConvertToHorizontallyMergedCells() converte le celle che erano state unite per larghezza corrispondente in celle contrassegnate esplicitamente con HorizontalMerge.


Larghezze preferite e larghezze delle celle

PreferredWidth rappresenta una larghezza e la sua unità, creata con i metodi factory statici PreferredWidth.FromPercent() o PreferredWidth.FromPoints(); PreferredWidthType identifica quale tipo di valore (Auto, Percent o Points) possiede un dato PreferredWidth. Sia Table.PreferredWidth che CellFormat.PreferredWidth accettano questi valori.


Celle unite

CellFormat.HorizontalMerge e CellFormat.VerticalMerge (CellMerge) indicano come una cella partecipa a un’unione orizzontale o verticale con le celle adiacenti. CellVerticalAlignment controlla come il contenuto è giustificato verticalmente all’interno di una cella, indipendentemente dallo stato di unione.


Suggerimenti e migliori pratiche

  • Chiudi ogni StartTable() con un EndRow() corrispondente per riga e un EndTable() finale – una riga o una tabella non chiusa lascia lo stato interno del builder (e l’albero del documento risultante) malformato.
  • Imposta DocumentBuilder.CellFormat e DocumentBuilder.RowFormat prima di ogni chiamata a InsertCell() o EndRow() se righe o celle diverse nella stessa tabella richiedono formattazioni differenti; il builder applica ciò che è attualmente impostato al momento dell’inserimento.
  • Chiama Table.EnsureMinimum(), Row.EnsureMinimum() o Cell.EnsureMinimum() dopo aver rimosso il contenuto programmaticamente affinché il nodo mantenga la struttura minima valida che Word si aspetta.
  • Usa PreferredWidth.FromPercent() per le tabelle che devono adattarsi alla larghezza di pagina disponibile, e PreferredWidth.FromPoints() per una larghezza di layout fissa.
  • AutoFitBehavior viene applicato quando chiami Table.AutoFit() – non viene eseguito continuamente man mano che aggiungi o rimuovi contenuto, quindi richiamalo nuovamente dopo modifiche significative se hai bisogno che la tabella sia ridimensionata nuovamente.

Problemi comuni

ProblemaCausaCorreggi
La tabella appare malformata o genera errori quando viene salvataUna riga o la tabella non è mai stata chiusa con EndRow() / EndTable()Associa sempre StartTable() a un EndTable() finale e chiudi ogni riga con EndRow()
Le nuove celle non adottano la formattazione che ho impostatoCellFormat / RowFormat sono stati modificati nel costruttore dopo che le celle erano già state inseriteImposta DocumentBuilder.CellFormat / RowFormat prima di chiamare InsertCell() / EndRow() per quel contenuto
La tabella non si ridimensiona come mi aspetto dopo le modificheAutoFit() riflette lo stato della tabella al momento della chiamata, non in modo continuoChiama nuovamente Table.AutoFit(AutoFitBehavior) dopo le modifiche strutturali
Le celle adiacenti che sembrano unite si comportano come celle separateLe celle erano abbinate solo per larghezza, non contrassegnate con CellMergeChiama Table.ConvertToHorizontallyMergedCells(), o imposta esplicitamente CellFormat.HorizontalMerge / VerticalMerge

FAQ

Come creo una tabella da zero con DocumentBuilder?

Chiama StartTable(), poi InsertCell() per ogni cella in una riga, EndRow() per chiudere la riga, ripeti per righe aggiuntive e infine EndTable() per chiudere la tabella.

Come impostare una larghezza della tabella in percentuale invece di una larghezza fissa?

Assegna Table.PreferredWidth = PreferredWidth.FromPercent(value) invece di PreferredWidth.FromPoints(value).

Come posso reimpostare tutta la formattazione su una cella o una riga?

Chiama CellFormat.ClearFormatting() sul CellFormat di una cella, oppure RowFormat.ClearFormatting() sul RowFormat di una riga.

Come impostare bordi e ombreggiatura per l’intera tabella contemporaneamente?

Usa Table.SetBorders() per un bordo uniforme su tutti i lati, Table.SetBorder() per un lato alla volta e Table.SetShading() per un’ombreggiatura uniforme; ClearBorders() e ClearShading() li reimpostano.


API Reference Sommario

Classe / EnumDescrizione
TableNodo della tabella; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowNodo di riga della tabella; Cells, RowFormat, EnsureMinimum()
CellNodo di cella della tabella; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionRaccolte tipizzate di nodi Table / Row / Cell
CellFormatFormattazione per cella: bordi, ombreggiatura, spaziatura interna, stato di unione, allineamento verticale
RowFormatFormattazione per riga: bordi, altezza, comportamento dell’interruzione di pagina
PreferredWidth / PreferredWidthTypeValore della larghezza di tabella o cella e la sua unità (auto, percentuale, punti)
AutoFitBehaviorCome Table.AutoFit() ridimensiona una tabella e le sue celle
CellMerge / CellVerticalAlignmentStato di unione celle orizzontale/verticale e allineamento verticale del contenuto
TableAlignment / TableStyleOptions / TextWrappingAllineamento a livello di tabella, applicazione di stile e comportamento dell’avvolgimento del testo
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableCostruzione di tabelle basata sul cursore

Vedi anche

 Italiano