Робота з редагованими діапазонами
Робота з редагованими діапазонами
Цей посібник показує, як перевіряти та видаляти редаговані діапазони — області, які функція 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 |