العمل مع النطاقات القابلة للتعديل
العمل مع النطاقات القابلة للتحرير
يوضح هذا الدليل كيفية فحص وإزالة النطاقات القابلة للتحرير – المناطق التي تستثنيها ميزة “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 |