جدول المحتويات(TOC) في مستند Word يمنحك نظرة عامة على ما يحتويه المستند. علاوة على ذلك ، يتيح لك التنقل إلى قسم معين من المستند. في هذه المقالة ، ستتعلم كيفية العمل مع جدول محتويات في مستندات Word برمجيًا. على وجه الخصوص ، تتناول هذه المقالة كيفية إضافة أو استخراج أو تحديث أو إزالة جدول محتويات في مستندات Word في C#.
- C# API لإضافة أو تحرير أو حذف جدول المحتويات في مستندات Word
- أضف جدول المحتويات في مستند Word
- استخراج جدول المحتويات من مستند Word
- تحديث جدول المحتويات في مستند Word
- قم بإزالة جدول المحتويات في مستند Word
- احصل على ترخيص API مجاني
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.
- قم بإنشاء مثيل لفئة Document(في حالة تحميل مستند Word موجود ، قم بتوفير مسار الملف في المنشئ).
- قم بإنشاء مثيل لفئة DocumentBuilder وتهيئته باستخدام كائن المستند الذي تم إنشاؤه مسبقًا.
- أدخل جدول المحتويات باستخدام طريقة DocumentBuilder.InsertTableOfContents ("\\ o \" 1-3 \\ “\\ h \\ z \\ u”).
- قم بتحديث الحقول باستخدام طريقة Document.UpdateFields().
- احفظ مستند Word باستخدام طريقة Document.Save(String).
يُظهر نموذج التعليمات البرمجية التالي كيفية إضافة جدول محتويات في مستند 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 باستخدام التوثيق. في حال كان لديك أي أسئلة أو استفسارات ، يرجى الاتصال بنا عبر المنتدى.