使用可编辑范围
使用可编辑范围
本指南展示了如何检查和删除可编辑范围——即 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 |