جدول المحتويات(TOC) في مستند Word يمنحك نظرة عامة على ما يحتويه المستند. علاوة على ذلك ، يتيح لك التنقل إلى قسم معين من المستند. في هذه المقالة ، ستتعلم كيفية العمل مع جدول محتويات في مستندات Word برمجيًا. على وجه الخصوص ، تتناول هذه المقالة كيفية إضافة أو استخراج أو تحديث أو إزالة جدول محتويات في مستندات Word في C#.

C# API لإضافة أو تحرير أو حذف جدول المحتويات في مستندات Word

من أجل العمل مع جداول المحتويات في مستندات Word ، سنستخدم Aspose.Words for .NET. تم تصميم واجهة برمجة التطبيقات المذكورة لأداء ميزات أتمتة Word الأساسية والمتقدمة من داخل تطبيقات .NET. علاوة على ذلك ، يمنحك قبضة جيدة على معالجة جدول المحتويات في مستندات Word. يمكنك إما تنزيل API أو تثبيته باستخدام NuGet.

PM> Install-Package Aspose.Words

إضافة جدول المحتويات في مستند Word في C#

فيما يلي خطوات إضافة جدول محتويات إلى مستند Word باستخدام Aspose.Words for .NET.

يُظهر نموذج التعليمات البرمجية التالي كيفية إضافة جدول محتويات في مستند Word في C#.

// للحصول على أمثلة وملفات بيانات كاملة ، يرجى الانتقال إلى https://github.com/aspose-words/Aspose.Words-for-.NET
// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// تهيئة المستند.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// أدخل جدول محتويات في بداية المستند.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// سيكون جدول المحتويات المُدرج حديثًا فارغًا في البداية.
// يجب أن يتم ملؤها عن طريق تحديث الحقول في المستند.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C# استخراج جدول المحتويات من مستند Word

فيما يلي خطوات استخراج الحقول من جدول محتويات في مستند Word.

  • قم بتحميل مستند Word باستخدام فئة Document.
  • قم بالتكرار خلال كل حقل في المستند باستخدام مجموعة Document.Range.Fields.
  • تحقق مما إذا كان نوع الحقل ارتباطًا تشعبيًا باستخدام خاصية Field.Type.
  • تحقق مما إذا كان الحقل يقع أسفل جدول قسم المحتويات.
  • استرجع معلومات الحقل واطبعها.

يوضح نموذج التعليمات البرمجية التالي كيفية استخراج جدول محتويات من مستند Word باستخدام C#.

// المسار إلى دليل المستندات.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();

string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);

foreach (Field field in doc.Range.Fields)
{
	if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
	{
		FieldHyperlink hyperlink = (FieldHyperlink)field;
		if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
		{
			Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
			Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
			Console.WriteLine("------------------");
			if (tocItem != null)
			{
				Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
				// احصل على الموقع الذي يشير إليه عنصر جدول المحتويات هذا
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

تحديث جدول المحتويات في مستند Word في C#

عندما تقوم بإلحاق بعض المحتوى بمستند Word ، فإنك تحتاج إلى تحديث جدول المحتويات. للقيام بذلك برمجيًا ، تحتاج ببساطة إلى استدعاء طريقة Document.UpdateFields() قبل حفظ المستند.

إزالة جدول المحتويات في مستند Word في C#

يسمح لك Aspose.Words for .NET بإزالة جدول المحتويات من مستند Word. فيما يلي خطوات إجراء هذه العملية.

  • أولاً ، قم بتحميل مستند Word باستخدام فئة Document.
  • احصل على العقد FieldStart وخزنها لكل جدول محتويات في مصفوفة.
  • قم بالتكرار خلال العقد حتى تحصل على العقدة من النوع FieldEnd(نهاية جدول المحتويات).
  • قم بإزالة العقد باستخدام طريقة Node.Remove() واحفظ المستند المحدث.

يُظهر نموذج التعليمات البرمجية التالي كيفية إزالة جدول المحتويات من مستند Word في C#.

// للحصول على أمثلة وملفات بيانات كاملة ، يرجى الانتقال إلى https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // المسار إلى دليل المستندات.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // افتح مستندًا يحتوي على جدول المحتويات.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // قم بإزالة أول جدول محتويات من المستند.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // احفظ الإخراج.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// يزيل حقل جدول المحتويات المحدد من المستند.
///</summary>
///<param name="doc"> المستند المطلوب إزالة الحقل منه.</param>
///<param name="index"> الفهرس الصفري لجدول المحتويات المراد إزالته.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // قم بتخزين عقد FieldStart لحقول جدول المحتويات في المستند للوصول السريع.
    ArrayList fieldStarts = new ArrayList();
    // هذه قائمة لتخزين العقد الموجودة داخل جدول المحتويات المحدد. سيتم إزالتها
    // في نهاية هذه الطريقة.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // قم بإضافة جميع FieldStarts من النوع FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // تأكد من وجود جدول المحتويات المحدد بواسطة الفهرس الذي تم تمريره.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // احصل على FieldStart من جدول المحتويات المحدد.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // من الآمن تخزين هذه العقد وحذفها جميعًا مرة واحدة لاحقًا.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // بمجرد أن نواجه عقدة FieldEnd من النوع FieldTOC ، فإننا نعلم أننا في النهاية
        // من جدول المحتويات الحالي ويمكننا التوقف هنا.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // قم بإزالة جميع العقد الموجودة في جدول المحتويات المحدد.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

احصل على ترخيص API مجاني

في حالة رغبتك في تجربة واجهة برمجة التطبيقات بدون قيود تقييمية ، يمكنك الحصول على ترخيص مؤقت مجاني.

استنتاج

في هذه المقالة ، تعلمت كيفية العمل مع جدول محتويات في مستند Word برمجيًا. أظهر الدليل التفصيلي وعينات التعليمات البرمجية كيفية إضافة جدول المحتويات وتحديثه واستخراجه وإزالته من مستندات Word في C#. يمكنك استكشاف المزيد حول واجهة برمجة تطبيقات أتمتة C# Word باستخدام التوثيق. في حال كان لديك أي أسئلة أو استفسارات ، يرجى الاتصال بنا عبر المنتدى.

أنظر أيضا