TableCollection

TableCollection class

Bir koleksiyona yazılı erişim sağlarTable düğümler.

Daha fazlasını öğrenmek için şu adresi ziyaret edin:Tablolarla Çalışmak dokümantasyon makalesi.

public class TableCollection : NodeCollection

Özellikleri

İsimTanım
Count { get; }Koleksiyondaki düğüm sayısını alır.
Item { get; }Bir öğeyi alırTable verilen dizinde. (2 indexers)

yöntemler

İsimTanım
Add(Node)Koleksiyonun sonuna bir düğüm ekler.
Clear()Tüm düğümleri bu koleksiyondan ve belgeden kaldırır.
Contains(Node)Bir düğümün koleksiyonda olup olmadığını belirler.
GetEnumerator()Düğümlerin koleksiyonu üzerinde basit bir “foreach” stili yinelemesi sağlar.
IndexOf(Node)Belirtilen düğümün sıfır tabanlı dizinini döndürür.
Insert(int, Node)Belirtilen dizindeki koleksiyona bir düğüm ekler.
Remove(Node)Düğümü koleksiyondan ve belgeden kaldırır.
RemoveAt(int)Belirtilen dizindeki düğümü koleksiyondan ve belgeden kaldırır.
ToArray()Koleksiyondaki tüm tabloları yeni bir tablo dizisine kopyalar. (2 methods)

Örnekler

Bir belgedeki tüm tabloların ilk ve son satırlarının nasıl kaldırılacağını gösterir.

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);

Bir tablonun iç içe olup olmadığının nasıl öğrenileceğini gösterir.

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];

        // Tablodaki herhangi bir hücrenin alt tablo olarak başka tabloları olup olmadığını öğrenin.
        int count = GetChildTableCount(table);
        Console.WriteLine("Table #{0} has {1} tables directly within its cells", i, count);

        // Tablonun başka bir tablonun içinde olup olmadığını ve eğer öyleyse hangi derinlikte olduğunu öğrenin.
        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>
/// Bir tablonun diğer tabloların içine hangi seviyede yerleştirildiğini hesaplar.
/// </summary>
/// <returns>
/// Tablonun iç içe geçme derinliğini belirten bir tamsayı (ana tablo düğümlerinin sayısı).
/// </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>
/// Bir tablonun hücreleri içinde herhangi bir doğrudan alt tablo içerip içermediğini belirler.
/// Daha fazla tablo olup olmadığını kontrol etmek için bu tabloların arasında yinelemeli olarak geçiş yapmayın.
/// </summary>
/// <returns>
/// Eğer en az bir alt hücre tablo içeriyorsa true değerini döndürür.
/// Tablodaki hiçbir hücre tablo içermiyorsa false değerini döndürür.
/// </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;
}

Ayrıca bakınız