編集可能範囲の操作
編集可能範囲の操作
このガイドでは、編集可能な範囲を検査および削除する方法を示します――Word の「編集の制限」機能が文書全体の編集制限から除外する領域で、特定のユーザーまたはグループに限定することもできます――in 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 は、ドキュメントのコンテンツフロー内で範囲の境界を示す sealed 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 は Word が名前付きグループを表示しているにもかかわらず、Unspecified として読み取られます | ソースドキュメント内の範囲のエディタ グループは、名前付きグループの値のいずれかではなく、EditorType.Unspecified/Default にマップされます | また SingleUser を確認してください – 範囲は個々のユーザーに限定される場合があります |
FAQ
ドキュメント内のすべての編集可能な範囲を見つけるにはどうすればよいですか?
まず Document.GetChildNodes(NodeType.EditableRangeStart, true) を呼び出し、次に返された各 EditableRangeStart ノードの EditableRange プロパティを読み取ります。
特定の範囲を編集できるユーザーを確認するにはどうすればよいですか?
ファサードオブジェクト上で EditableRange.SingleUser(特定のユーザー)と EditableRange.EditorGroup(EditorType 編集グループ)を読み取ります。
ドキュメントの一部から編集制限を削除するにはどうすればよいですか?
その範囲に対して、EditableRange ファサードオブジェクト上で Remove() を呼び出します。
EditableRangeStart.EditableRange と EditableRangeEnd.EditableRangeStart の違いは何ですか?
EditableRangeStart.EditableRange は全範囲を記述したファサードオブジェクトに直接到達します。EditableRangeEnd.EditableRangeStart は対応する開始マーカーノードに遡り、そこから EditableRange に到達できます。
API Reference 概要
| クラス / 列挙型 | 説明 |
|---|---|
EditableRange | 1 つの編集可能な範囲のファサード: Id, SingleUser, EditorGroup, Remove() |
EditableRangeStart | 範囲の開始を示すノード; Id, EditableRange |
EditableRangeEnd | 範囲の終了を示すノード; Id, EditableRangeStart |
EditorType | 編集グループの列挙: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default |