TableCollection

TableCollection class

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

Daha fazla bilgi edinmek için şu adresi ziyaret edin:Tablolarla Çalışma belgeleme makalesi.

public class TableCollection : NodeCollection

Özellikleri

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

yöntemler

İsimTanım
Add(Node)Koleksiyonun sonuna bir düğüm ekler.
Clear()Bu koleksiyondan ve belgeden tüm düğümleri kaldırır.
Contains(Node)Bir düğümün koleksiyonda olup olmadığını belirler.
GetEnumerator()Düğüm koleksiyonu üzerinde basit bir “foreach” tarzı yineleme sağlar.
IndexOf(Node)Belirtilen düğümün sıfır tabanlı dizinini döndürür.
Insert(int, Node)Belirtilen dizinde 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 geçmiş olup olmadığını nasıl bulacağınızı 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 tabloları olup olmadığını bulun.
        int count = GetChildTableCount(table);
        Console.WriteLine("Table #{0} has {1} tables directly within its cells", i, count);

        // Tablonun başka bir tablonun içinde yer alıp almadığını ve eğer yer alıyorsa hangi derinlikte olduğunu bulun.
        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çinde ne düzeyde yuvalandığını hesaplar.
/// </summary>
/// <returns>
/// Tablonun iç içe geçme derinliğini (üst tablo düğümlerinin sayısı) belirten bir tam sayı.
/// </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çerisinde herhangi bir alt tablonun bulunup bulunmadığını belirler.
/// Daha fazla tablo olup olmadığını kontrol etmek için bu tablolar arasında yinelemeli olarak gezinmeyin.
/// </summary>
/// <returns>
/// En az bir alt hücrenin tablo içermesi durumunda true döner.
/// Tabloda tablo içeren hiçbir hücre yoksa false döndürür.
/// </returns>
private static int GetChildTableCount(Table table)
{
    int childTableCount = 0;

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

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

    return childTableCount;
}

Ayrıca bakınız