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 unEndRow()coincidente por fila y unEndTable()final – una fila o tabla sin cerrar deja el estado interno del constructor (y el árbol de documentos resultante) mal formado. - Establezca
DocumentBuilder.CellFormatyDocumentBuilder.RowFormatantes de cada llamada aInsertCell()oEndRow()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()oCell.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, yPreferredWidth.FromPoints()para un ancho de diseño fijo. AutoFitBehaviorse aplica cuando llama aTable.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
| Issue | Causa | Corregir |
|---|---|---|
| La tabla parece malformada o genera un error al guardarse | Una 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 insertadas | Establece 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 ediciones | AutoFit() refleja el estado de la tabla en el momento en que se llama, no de forma continua | Llama a Table.AutoFit(AutoFitBehavior) de nuevo después de ediciones estructurales |
| Las celdas adyacentes que parecen fusionadas se comportan como celdas separadas | Las celdas solo se emparejaron por ancho, no se marcaron con CellMerge | Llama 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ón | Descripción |
|---|---|
Table | Nodo de tabla; Rows, AutoFit(), SetBorders(), SetShading(), PreferredWidth |
Row | Nodo de fila de tabla; Cells, RowFormat, EnsureMinimum() |
Cell | Nodo de celda de tabla; CellFormat, EnsureMinimum() |
TableCollection / RowCollection / CellCollection | Colecciones tipadas de nodos Table / Row / Cell |
CellFormat | Formato por celda: bordes, sombreado, relleno, estado de fusión, alineación vertical |
RowFormat | Formato por fila: bordes, altura, comportamiento de salto de página |
PreferredWidth / PreferredWidthType | Valor de ancho de tabla o celda y su unidad (auto, porcentaje, puntos) |
AutoFitBehavior | Cómo Table.AutoFit() redimensiona una tabla y sus celdas |
CellMerge / CellVerticalAlignment | Estado de fusión de celdas horizontal/vertical y alineación vertical del contenido |
TableAlignment / TableStyleOptions / TextWrapping | Alineación a nivel de tabla, aplicación de estilos y comportamiento de ajuste de texto |
DocumentBuilder.StartTable / InsertCell / EndRow / EndTable | Construcción de tabla basada en el cursor |