TableCollection

TableCollection class

Proporciona acceso escrito a una colección deTable nodos.

Para obtener más información, visite elTrabajar con tablas artículo de documentación.

public class TableCollection : NodeCollection

Propiedades

NombreDescripción
Count { get; }Obtiene el número de nodos de la colección.
Item { get; }Recupera unTable en el índice dado. (2 indexers)

Métodos

NombreDescripción
Add(Node)Agrega un nodo al final de la colección.
Clear()Elimina todos los nodos de esta colección y del documento.
Contains(Node)Determina si un nodo está en la colección.
GetEnumerator()Proporciona una iteración de estilo “foreach” simple sobre la colección de nodos.
IndexOf(Node)Devuelve el índice de base cero del nodo especificado.
Insert(int, Node)Inserta un nodo en la colección en el índice especificado.
Remove(Node)Elimina el nodo de la colección y del documento.
RemoveAt(int)Elimina el nodo en el índice especificado de la colección y del documento.
ToArray()Copia todas las tablas de la colección en una nueva matriz de tablas. (2 methods)

Ejemplos

Muestra cómo eliminar la primera y la última fila de todas las tablas de un documento.

Document doc = new Document(MyDir + "Tables.docx");

TableCollection tables = doc.FirstSection.Body.Tables;

Assert.AreEqual(5, tables[0].Rows.Count);
Assert.AreEqual(4, tables[1].Rows.Count);

foreach (Table table in tables.OfType<Table>())
{
    table.FirstRow?.Remove();
    table.LastRow?.Remove();
}

Assert.AreEqual(3, tables[0].Rows.Count);
Assert.AreEqual(2, tables[1].Rows.Count);

Muestra cómo saber si una tabla está anidada.

public void CalculateDepthOfNestedTables()
{
    Document doc = new Document(MyDir + "Nested tables.docx");
    NodeCollection tables = doc.GetChildNodes(NodeType.Table, true);
    for (int i = 0; i < tables.Count; i++)
    {
        Table table = (Table)tables[i];

        // Descubra si alguna celda de la tabla tiene otras tablas como hijas.
        int count = GetChildTableCount(table);
        Console.WriteLine("Table #{0} has {1} tables directly within its cells", i, count);

        // Descubra si la tabla está anidada dentro de otra tabla y, de ser así, a qué profundidad.
        int tableDepth = GetNestedDepthOfTable(table);

        if (tableDepth > 0)
            Console.WriteLine("Table #{0} is nested inside another table at depth of {1}", i,
                tableDepth);
        else
            Console.WriteLine("Table #{0} is a non nested table (is not a child of another table)", i);
    }
}

/// <summary>
/// Calcula en qué nivel está anidada una tabla dentro de otras tablas.
/// </summary>
/// <returns>
/// Un número entero que indica la profundidad de anidamiento de la tabla (número de nodos de la tabla principal).
/// </returns>
private static int GetNestedDepthOfTable(Table table)
{
    int depth = 0;
    Node parent = table.GetAncestor(table.NodeType);

    while (parent != null)
    {
        depth++;
        parent = parent.GetAncestor(typeof(Table));
    }

    return depth;
}

/// <summary>
/// Determina si una tabla contiene alguna tabla secundaria inmediata dentro de sus celdas.
/// No recorra recursivamente esas tablas para buscar más tablas.
/// </summary>
/// <returns>
/// Devuelve verdadero si al menos una celda secundaria contiene una tabla.
/// Devuelve falso si ninguna celda de la tabla contiene una tabla.
/// </returns>
private static int GetChildTableCount(Table table)
{
    int childTableCount = 0;

    foreach (Row row in table.Rows.OfType<Row>())
    {
        foreach (Cell Cell in row.Cells.OfType<Cell>())
        {
            TableCollection childTables = Cell.Tables;

            if (childTables.Count > 0)
                childTableCount++;
        }
    }

    return childTableCount;
}

Ver también