Arbeta med redigerbara områden
Arbeta med redigerbara områden
Den här guiden visar hur man inspekterar och tar bort redigeringsområden – de regioner som Words funktion “Restrict Editing” undantar från ett dokuments övergripande redigeringsbegränsning, eventuellt avgränsade till en specifik användare eller grupp – i Aspose.Words FOSS för .NET. Ett redigeringsområde omges i dokumentträdet av ett par markeringsnoder, EditableRangeStart and EditableRangeEnd, och beskrivs som helhet av EditableRange fasadklass.
Hitta redigerbara områden i ett dokument
Det finns ingen enskild samlings-egenskap för redigerbara områden; hitta dem genom att gå igenom nodträdet. CompositeNode.GetChildNodes(nodeType, isDeep) med NodeType.EditableRangeStart returnerar varje EditableRangeStart nod i dokumentet (eller i ett delträd, om den anropas på en nod annan än Document). Varje EditableRangeStart.EditableRange-egenskap returnerar sedan motsvarande EditableRange fasadobjekt.
Facaden EditableRange
EditableRange beskriver ett enskilt redigerbart område som helhet: Id identifierar det, SingleUser anger eventuellt en specifik användare som får redigera det, och EditorGroup (ett EditorType-värde) anger i stället eventuellt en redigeringsgrupp. EditableRangeStart och EditableRangeEnd returnerar paret av markörnoder som omger området i dokumentet. EditableRange.Remove() tar bort det redigerbara området – lyfter undantaget från redigeringsrestriktionen för den regionen, utan att radera dokumentinnehållet innanför.
Markörnoderna: EditableRangeStart och EditableRangeEnd
EditableRangeStart och EditableRangeEnd är förseglade Node underklasser som markerar gränserna för ett intervall i dokumentets innehållsflöde. EditableRangeStart.Id och EditableRangeEnd.Id identifierar intervallet; EditableRangeStart.EditableRange når fasadobjektet direkt, och EditableRangeEnd.EditableRangeStart går tillbaka till motsvarande startmarkör. Eftersom de är vanliga noder stöder båda de standard Node medlemmarna – ParentNode, Document, PreviousSibling, NextSibling och Remove() för att ta bort den enskilda markören.
Begränsa åtkomst med EditorType
EditorType listar de redigeringsgrupper en EditableRange.EditorGroup kan referera till: Administrators, Contributors, Editors, Owners, Everyone, Current, None och Unspecified (finns också som Default, ett alias för Unspecified).
Tips och bästa praxis
- Använd
GetChildNodes(NodeType.EditableRangeStart, true)medisDeep: trueför att hitta redigerbara intervall var som helst i dokumentet, inte bara bland en nods omedelbara barn. - Läs
EditableRange.SingleUserochEditorGrouptillsammans för att avgöra för vem ett intervall är begränsat – ett intervall kan vara avgränsat till en specifik användare, en redigeringsgrupp eller ingen av dem. - Anropa
EditableRange.Remove()(på fasaden) istället för att ta bortEditableRangeStartochEditableRangeEndmarkörnoderna individuellt, så att båda ändarna av intervallet rensas upp konsekvent.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
| Inga redigerbara områden hittades trots att dokumentet har begränsad redigering | Sökning använde standard (grundläggande) GetChildNodes anrop | Skicka isDeep: true så att sökningen omfattar hela dokumentets underträd |
| Att ta bort ett redigerbart område tar inte bort den omslutna texten | EditableRange.Remove() tar bara bort områdesmarkörerna och redigeringsundantaget, inte innehållet däremellan | Detta är förväntat – ta bort innehållet separat om det också ska tas bort |
EditorGroup läses som Unspecified även om Word visar en namngiven grupp | Områdets redigeringsgrupp i källdokumentet mappar till EditorType.Unspecified/Default snarare än ett av de namngivna gruppvärdena | Kontrollera SingleUser också – intervallet kan istället vara avgränsat till en enskild användare |
FAQ
Hur hittar jag alla redigerbara områden i ett dokument?
Anropa Document.GetChildNodes(NodeType.EditableRangeStart, true), läs sedan egenskapen EditableRange på varje EditableRangeStart-nod som returneras.
Hur kan jag ta reda på vem som får redigera ett givet område?
Läs EditableRange.SingleUser (en specifik användare) och EditableRange.EditorGroup (en EditorType redigeringsgrupp) på fasadobjektet.
Hur tar jag bort en redigeringsbegränsning från en del av ett dokument?
Anropa Remove() på EditableRange fasadobjektet för det området.
Vad är skillnaden mellan EditableRangeStart.EditableRange och EditableRangeEnd.EditableRangeStart?
EditableRangeStart.EditableRange når fasadobjektet som beskriver hela intervallet direkt. EditableRangeEnd.EditableRangeStart når tillbaka till den motsvarande startmarkörnoden, från vilken EditableRange sedan kan nås.
API Reference Sammanfattning
| Klass / Enum | Beskrivning |
|---|---|
EditableRange | Facade för ett redigerbart intervall: Id, SingleUser, EditorGroup, Remove() |
EditableRangeStart | Nod som markerar början av ett intervall; Id, EditableRange |
EditableRangeEnd | Nod som markerar slutet av ett intervall; Id, EditableRangeStart |
EditorType | Enum av redigeringsgrupper: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default |