Trabajando con tablas

Trabajar con tablas

Tablas en Aspose.Words FOSS for .NET están representadas por el Aspose.Words.Tables espacio de nombres: Table, Row, y Cell forman una jerarquía de nodos compuesta de tres niveles que se encuentra en el árbol del documento junto a los párrafos. Esta página cubre la creación de tablas con , el formato de filas y celdas, el control del diseño de toda la tabla y la fusión de celdas. DocumentBuilder,Problema.


El modelo de objeto de tabla

Un Table es un CompositeNode que contiene nodos Row, y cada Row es un CompositeNode que contiene nodos Cell; a su vez, un Cell contiene párrafos y, potencialmente, tablas anidadas. Table.Rows devuelve un RowCollection, Row.Cells devuelve un CellCollection, y un Body u otro Story expone cada tabla de nivel superior en él a través de su propiedad Tables, un TableCollection. Las tres colecciones admiten Add(), Insert(), Remove(), RemoveAt(), Contains() y IndexOf(). Table.EnsureMinimum(), Row.EnsureMinimum() y Cell.EnsureMinimum() rellenan cada uno el contenido válido más pequeño que un nodo de ese tipo necesita (una fila vacía, una celda vacía o un párrafo vacío, respectivamente) después de que las ediciones programáticas lo dejen sin él.


Crear tablas con DocumentBuilder

DocumentBuilder.StartTable() inicia una nueva tabla en el cursor, InsertCell() agrega una celda a la fila actual, EndRow() cierra la fila actual y EndTable() cierra la tabla. Configure DocumentBuilder.CellFormat y DocumentBuilder.RowFormat antes de llamar a InsertCell() o EndRow() para aplicar el formato predeterminado a las celdas y filas a medida que se crean; estas propiedades actúan como una plantilla para el contenido que el constructor inserta a continuación, no como un cambio retroactivo en las celdas que ya están en el documento.


Formato de celdas y filas

Cell.CellFormat es una instancia de CellFormat (Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth, LeftPadding, RightPadding, TopPadding, BottomPadding, HideMark, Orientation) con ClearFormatting() para restablecerla y SetPaddings() para establecer los cuatro rellenos de celda a la vez. Row.RowFormat es una instancia de RowFormat (Borders, Height, HeightRule, AllowBreakAcrossPages, HeadingFormat) con su propio ClearFormatting().


Formato de tabla completa y AutoFit

Table expone por sí mismo propiedades de diseño – Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), TextWrapping, y metadatos de accesibilidad a través de Title y Description. Table.AutoFit(AutoFitBehavior) redimensiona la tabla y sus celdas según el comportamiento especificado. SetBorder() establece un lado del borde y SetBorders() establece todos los bordes con el mismo estilo de línea, ancho y color en toda la tabla; ClearBorders() y ClearShading() los restablecen. ConvertToHorizontallyMergedCells() convierte celdas que fueron fusionadas por coincidencia de ancho en celdas que están explícitamente marcadas con HorizontalMerge.


Anchos preferidos y de celda

PreferredWidth representa un ancho y su unidad, creado con los métodos estáticos de fábrica PreferredWidth.FromPercent() o PreferredWidth.FromPoints(); PreferredWidthType identifica qué tipo de valor (Auto, Percent o Points) contiene un PreferredWidth dado. Tanto Table.PreferredWidth como CellFormat.PreferredWidth aceptan estos valores.


Celdas fusionadas

CellFormat.HorizontalMerge y CellFormat.VerticalMerge (CellMerge) indican cómo una celda participa en una fusión horizontal o vertical con sus vecinas. CellVerticalAlignment controla cómo se justifica el contenido dentro de una celda verticalmente, independientemente de cualquier estado de fusión.


Consejos y mejores prácticas

  • Cierre cada StartTable() con un EndRow() coincidente por fila y un EndTable() final – una fila o tabla sin cerrar deja el estado interno del constructor (y el árbol de documentos resultante) mal formado.
  • Establezca DocumentBuilder.CellFormat y DocumentBuilder.RowFormat antes de cada llamada a InsertCell() o EndRow() si filas o celdas diferentes en la misma tabla requieren un formato distinto; el constructor aplica lo que esté configurado en ese momento de la inserción.
  • Llame a Table.EnsureMinimum(), Row.EnsureMinimum() o Cell.EnsureMinimum() después de eliminar contenido programáticamente para que el nodo mantenga la estructura mínima válida que Word espera.
  • Utilice PreferredWidth.FromPercent() para tablas que deben adaptarse al ancho de página disponible, y PreferredWidth.FromPoints() para un ancho de diseño fijo.
  • AutoFitBehavior se aplica cuando llama a Table.AutoFit() – no se vuelve a ejecutar continuamente al agregar o eliminar contenido, así que llámelo de nuevo después de ediciones significativas si necesita volver a ajustar la tabla.

Problemas comunes

IssueCausaCorregir
La tabla parece malformada o genera un error al guardarseUna fila o la tabla nunca se cerró con EndRow() / EndTable()Siempre combina StartTable() con un EndTable() final, y cierra cada fila con EndRow()
Las celdas nuevas no adoptan el formato que establecíCellFormat / RowFormat se cambiaron en el constructor después de que las celdas ya fueron insertadasEstablece DocumentBuilder.CellFormat / RowFormat antes de llamar a InsertCell() / EndRow() para ese contenido
La tabla no cambia de tamaño como espero después de las edicionesAutoFit() refleja el estado de la tabla en el momento en que se llama, no de forma continuaLlama a Table.AutoFit(AutoFitBehavior) de nuevo después de ediciones estructurales
Las celdas adyacentes que parecen fusionadas se comportan como celdas separadasLas celdas solo se emparejaron por ancho, no se marcaron con CellMergeLlama a Table.ConvertToHorizontallyMergedCells(), o establece CellFormat.HorizontalMerge / VerticalMerge explícitamente

FAQ

¿Cómo construyo una tabla desde cero con DocumentBuilder?

Llame a StartTable(), luego InsertCell() para cada celda en una fila, EndRow() para cerrar la fila, repita para filas adicionales y, finalmente, EndTable() para cerrar la tabla.

¿Cómo establezco un ancho de tabla basado en porcentaje en lugar de un ancho fijo?

Asigne Table.PreferredWidth = PreferredWidth.FromPercent(value) en lugar de PreferredWidth.FromPoints(value).

¿Cómo restablezco todo el formato en una celda o fila?

Llame a CellFormat.ClearFormatting() en el CellFormat de una celda, o RowFormat.ClearFormatting() en el RowFormat de una fila.

¿Cómo configuro bordes y sombreado para toda la tabla de una sola vez?

Use Table.SetBorders() para un borde uniforme en todos los lados, Table.SetBorder() para un lado a la vez, y Table.SetShading() para sombreado uniforme; ClearBorders() y ClearShading() los restablecen.


API Reference Resumen

Clase / EnumeraciónDescripción
TableNodo de tabla; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth
RowNodo de fila de tabla; Cells, RowFormat, EnsureMinimum()
CellNodo de celda de tabla; CellFormat, EnsureMinimum()
TableCollection / RowCollection / CellCollectionColecciones tipadas de nodos Table / Row / Cell
CellFormatFormato por celda: bordes, sombreado, relleno, estado de fusión, alineación vertical
RowFormatFormato por fila: bordes, altura, comportamiento de salto de página
PreferredWidth / PreferredWidthTypeValor de ancho de tabla o celda y su unidad (auto, porcentaje, puntos)
AutoFitBehaviorCómo Table.AutoFit() redimensiona una tabla y sus celdas
CellMerge / CellVerticalAlignmentEstado de fusión de celdas horizontal/vertical y alineación vertical del contenido
TableAlignment / TableStyleOptions / TextWrappingAlineación a nivel de tabla, aplicación de estilos y comportamiento de ajuste de texto
DocumentBuilder.StartTable / InsertCell / EndRow / EndTableConstrucción de tabla basada en el cursor

Ver también

 Español