使用可编辑范围

使用可编辑范围

使用可编辑范围

本指南展示了如何检查和删除可编辑范围——即 Word 的"Restrict Editing"功能从文档的整体编辑限制中豁免的区域,可选地限定于特定用户或组——在 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 直接访问 facade 对象,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()(在 facade 上),而不是单独删除 EditableRangeStart 和 EditableRangeEnd 标记节点,这样范围的两端可以一致地被清理。

常见问题

问题原因修复
即使文档已设置受限编辑,也未找到可编辑范围搜索使用了默认的(浅层)GetChildNodes 调用传入 isDeep: true 以便搜索覆盖整个文档子树
删除可编辑范围不会删除其中的文本EditableRange.Remove() 仅删除范围标记和编辑豁免,而不删除它们之间的内容这是预期的行为——如果内容也需要删除,请单独删除
EditorGroup 显示为 Unspecified,即使 Word 显示了命名组源文档中范围的编辑器组映射为 EditorType.Unspecified/Default,而不是某个命名组的值同时检查 SingleUser —— 范围可能改为针对单个用户

FAQ

我如何在文档中查找所有可编辑范围?

调用 Document.GetChildNodes(NodeType.EditableRangeStart, true),然后读取每个返回的 EditableRangeStart 节点上的 EditableRange 属性。

我如何判断谁被允许编辑特定范围?

读取 facade 对象上的 EditableRange.SingleUser(特定用户)和 EditableRange.EditorGroup(一个 EditorType 编辑组)。

我如何从文档的某部分移除编辑限制?

对该范围的 EditableRange facade 对象调用 Remove()。

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

另请参阅

 中文