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>
/// يُرجع صحيحًا إذا كانت هناك خلية فرعية واحدة على الأقل تحتوي على جدول.
/// يُرجع خطأ إذا لم تكن هناك خلايا في الجدول تحتوي على جدول.
/// </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;
}

أنظر أيضا