TableCollection

TableCollection class

يوفر وصولاً مكتوبًا إلى مجموعة منTable العقد.

لمعرفة المزيد، قم بزيارةالعمل مع الجداول مقالة توثيقية.

public class TableCollection : NodeCollection

الخصائص

اسموصف
Count { get; }يحصل على عدد العقد في المجموعة.
Item { get; }يسترجعTable عند الفهرس المعطى. (2 indexers)

طُرق

اسموصف
Add(Node)يضيف عقدة إلى نهاية المجموعة.
Clear()يزيل جميع العقد من هذه المجموعة ومن المستند.
Contains(Node)يحدد ما إذا كانت العقدة موجودة في المجموعة.
GetEnumerator()يوفر تكرارًا بسيطًا بأسلوب “foreach” عبر مجموعة العقد.
IndexOf(Node)يعيد الفهرس المبني على الصفر للعقدة المحددة.
Insert(int, Node)يقوم بإدراج عقدة في المجموعة عند الفهرس المحدد.
Remove(Node)يزيل العقدة من المجموعة ومن المستند.
RemoveAt(int)يزيل العقدة الموجودة في الفهرس المحدد من المجموعة ومن المستند.
ToArray()نسخ جميع الجداول من المجموعة إلى مجموعة جديدة من الجداول. (2 methods)

أمثلة

يوضح كيفية إزالة الصفوف الأولى والأخيرة من كافة الجداول في مستند.

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

يوضح كيفية معرفة ما إذا كانت الجداول متداخلة.

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

        // اكتشف ما إذا كانت أي خلايا في الجدول تحتوي على جداول أخرى كخلايا فرعية.
        int count = GetChildTableCount(table);
        Console.WriteLine("Table #{0} has {1} tables directly within its cells", i, count);

        // اكتشف ما إذا كان الجدول متداخلاً داخل جدول آخر، وإذا كان الأمر كذلك، فما هو العمق.
        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>
/// يحسب مستوى الجدول المتداخل داخل الجداول الأخرى.
/// </summary>
/// <returns>
/// عدد صحيح يشير إلى عمق التعشيش للجدول (عدد عقد الجدول الرئيسي).
/// </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>
/// يحدد ما إذا كان الجدول يحتوي على أي جدول فرعي مباشر داخل خلاياه.
/// لا تقم بالمرور بشكل متكرر عبر هذه الجداول للتحقق من وجود جداول أخرى.
/// </summary>
/// <returns>
/// يعود صحيحًا إذا كانت هناك خلية فرعية واحدة على الأقل تحتوي على جدول.
/// يتم إرجاع القيمة false إذا لم تحتوي أي خلايا في الجدول على جدول.
/// </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;
}

أنظر أيضا