Работа с редактируемыми диапазонами

Работа с редактируемыми диапазонами

Работа с редактируемыми диапазонами

Это руководство показывает, как просматривать и удалять редактируемые диапазоны — области, которые функция 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

См. также:

 Русский