Работа с редактируемыми диапазонами
Работа с редактируемыми диапазонами
Это руководство показывает, как просматривать и удалять редактируемые диапазоны — области, которые функция Word «Restrict Editing» освобождает от общего ограничения редактирования документа, при необходимости ограничивая их конкретным пользователем или группой — в Aspose.Words FOSS for .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 |