العمل مع النطاقات القابلة للتعديل

العمل مع النطاقات القابلة للتعديل

العمل مع النطاقات القابلة للتحرير

يوضح هذا الدليل كيفية فحص وإزالة النطاقات القابلة للتحرير – المناطق التي تستثنيها ميزة “Restrict Editing” في Word من قيود التحرير العامة للمستند، ويمكن تحديدها اختياريًا لمستخدم أو مجموعة محددة – في Aspose.Words FOSS لـ .NET. النطاق القابل للتحرير محاط في شجرة المستند بزوج من عقد العلامة، EditableRangeStart and EditableRangeEnd، ويُوصف ككل بواسطة EditableRange فئة الواجهة.


العثور على النطاقات القابلة للتحرير في مستند

لا توجد خاصية مجموعة واحدة للنطاقات القابلة للتحرير؛ يجب العثور عليها عبر تجوال شجرة العقد. CompositeNode.GetChildNodes(nodeType, isDeep) مع NodeType.EditableRangeStart تُعيد كل عقدة EditableRangeStart في المستند (أو في شجرة فرعية، إذا تم استدعاؤها على عقدة غير Document). كل خاصية EditableRangeStart.EditableRange تُعيد بعد ذلك كائن الواجهة EditableRange المقابل.


واجهة EditableRange

EditableRange يصف نطاقًا قابلًا للتحرير ككل: Id يحدده، SingleUser يحدد اختياريًا مستخدمًا معينًا مسموحًا له بتحريره، وEditorGroup (قيمة EditorType) يحدد اختياريًا مجموعة تحرير بدلاً من ذلك. EditableRangeStart وEditableRangeEnd تُعيدان زوجًا من عقد العلامة التي تُحيط بالنطاق في المستند. EditableRange.Remove() يزيل النطاق القابل للتحرير – رافعةً استثناء قيود التحرير لتلك المنطقة، دون حذف محتوى المستند داخلها.


عقد العلامة: EditableRangeStart و EditableRangeEnd

EditableRangeStart و EditableRangeEnd هما فئتان فرعيتان Node مغلقتان تحددان حدود النطاق في تدفق محتوى المستند. EditableRangeStart.Id و EditableRangeEnd.Id يحددان النطاق؛ EditableRangeStart.EditableRange يصل إلى كائن الواجهة مباشرةً، وEditableRangeEnd.EditableRangeStart يعود إلى علامة البداية المقابلة. كونهما عقدًا عادية، فإنهما يدعمان الأعضاء القياسية Node — ParentNode، Document، PreviousSibling، NextSibling، وRemove() لحذف العلامة الفردية.


تقييد الوصول باستخدام EditorType

EditorType يسرد مجموعات التحرير التي يمكن لـ EditableRange.EditorGroup الإشارة إليها: Administrators، Contributors، Editors، Owners، Everyone، Current، None، وUnspecified (متاح أيضًا كـ Default، وهو اسم مستعار لـ Unspecified).


نصائح وأفضل الممارسات

  • استخدم GetChildNodes(NodeType.EditableRangeStart, true) مع isDeep: true للعثور على النطاقات القابلة للتحرير في أي مكان بالمستند، وليس فقط بين أبناء العقدة المباشرين.
  • اقرأ EditableRange.SingleUser وEditorGroup معًا لتحديد لمن يُقيد النطاق — يمكن أن يكون النطاق مخصصًا لمستخدم واحد محدد، أو مجموعة تحرير واحدة، أو لا شيء.
  • استدعِ EditableRange.Remove() (على الواجهة) بدلاً من إزالة عقد العلامة EditableRangeStart وEditableRangeEnd بشكل فردي، حتى يتم تنظيف كلا طرفي النطاق بشكل متسق.

مشكلات شائعة

المشكلةالسببالإصلاح
لم يتم العثور على أي نطاقات قابلة للتحرير على الرغم من أن المستند يحتوي على تحرير مقيداستخدم البحث استدعاء GetChildNodes الافتراضي (سطحي)مرّر isDeep: true بحيث يغطي البحث الشجرة الفرعية الكاملة للمستند
إزالة نطاق قابل للتحرير لا تُزيل النص المضمنEditableRange.Remove() يزيل فقط علامات النطاق وإعفاء التحرير، وليس المحتوى بينهاهذا متوقع – احذف المحتوى بشكل منفصل إذا كان يحتاج أيضًا إلى الإزالة
EditorGroup يُقرأ كـ Unspecified على الرغم من أن Word يعرض مجموعة مسماةمجموعة محرر النطاق في المستند الأصلي تُطابق EditorType.Unspecified/Default بدلاً من إحدى قيم المجموعة المسماةتحقق من SingleUser أيضًا – قد يكون النطاق مخصصًا لمستخدم فردي

FAQ

كيف يمكنني العثور على جميع النطاقات القابلة للتحرير في المستند؟

استدعِ Document.GetChildNodes(NodeType.EditableRangeStart, true)، ثم اقرأ خاصية EditableRange على كل عقدة EditableRangeStart تم إرجاعها.

كيف يمكنني معرفة من المسموح له بتحرير نطاق معين؟

اقرأ EditableRange.SingleUser (مستخدم محدد) وEditableRange.EditorGroup (مجموعة تحرير EditorType) على كائن الواجهة.

كيف أزيل قيود التحرير من جزء من المستند؟

استدعِ Remove() على كائن الواجهة EditableRange لذلك النطاق.

ما الفرق بين EditableRangeStart.EditableRange وEditableRangeEnd.EditableRangeStart؟

EditableRangeStart.EditableRange يصل إلى كائن الواجهة الذي يصف النطاق الكامل مباشرةً. EditableRangeEnd.EditableRangeStart يعود إلى عقدة علامة البداية المقابلة، والتي يمكن بعدها الوصول إلى EditableRange.


API Reference ملخص

فئة / تعدادوصف
EditableRangeواجهة أمامية لنطاق قابل للتحرير واحد: Id, SingleUser, EditorGroup, Remove()
EditableRangeStartالعقدة التي تحدد بداية النطاق; Id, EditableRange
EditableRangeEndالعقدة التي تحدد نهاية النطاق; Id, EditableRangeStart
EditorTypeتعداد مجموعات التحرير: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default

انظر أيضاً

 العربية