Lavorare con le aree modificabili
Lavorare con gli intervalli modificabili
Questa guida mostra come ispezionare e rimuovere le aree modificabili – le regioni che la funzione “Restrict Editing” di Word esenta dalla restrizione di modifica complessiva del documento, opzionalmente limitate a un utente o gruppo specifico – in Aspose.Words FOSS per .NET. Un’area modificabile è delimitata nell’albero del documento da una coppia di nodi marcatore, EditableRangeStart and EditableRangeEnd, e descritta nel suo complesso da EditableRange classe facciata.
Trovare gli intervalli modificabili in un documento
Non esiste una singola proprietà di raccolta per gli intervalli modificabili; è necessario trovarli percorrendo l’albero dei nodi. CompositeNode.GetChildNodes(nodeType, isDeep) con NodeType.EditableRangeStart restituisce ogni nodo EditableRangeStart nel documento (o in un sottoalbero, se chiamato su un nodo diverso da Document). Ogni proprietà EditableRangeStart.EditableRange restituisce quindi l’oggetto facciata EditableRange corrispondente.
La facciata EditableRange
EditableRange descrive un singolo intervallo modificabile nella sua interezza: Id lo identifica, SingleUser opzionalmente assegna il nome a un utente specifico autorizzato a modificarlo, e EditorGroup (un valore EditorType) opzionalmente assegna il nome a un gruppo di modifica invece. EditableRangeStart e EditableRangeEnd restituiscono la coppia di nodi marcatore che delimitano l’intervallo nel documento. EditableRange.Remove() rimuove l’intervallo modificabile – sollevando l’esenzione dalla restrizione di modifica per quella regione, senza eliminare il contenuto del documento al suo interno.
I nodi marcatore: EditableRangeStart e EditableRangeEnd
EditableRangeStart e EditableRangeEnd sono sottoclassi Node sigillate che segnano i confini di un intervallo nel flusso di contenuto del documento. EditableRangeStart.Id e EditableRangeEnd.Id identificano l’intervallo; EditableRangeStart.EditableRange accede direttamente all’oggetto facciata, e EditableRangeEnd.EditableRangeStart torna al marcatore di inizio corrispondente. Essendo nodi ordinari, entrambi supportano i membri standard Node – ParentNode, Document, PreviousSibling, NextSibling e Remove() per eliminare il marcatore individuale.
Limitare l’accesso con EditorType
EditorType elenca i gruppi di modifica a cui un EditableRange.EditorGroup può fare riferimento: Administrators, Contributors, Editors, Owners, Everyone, Current, None e Unspecified (disponibile anche come Default, un alias per Unspecified).
Suggerimenti e migliori pratiche
- Usa
GetChildNodes(NodeType.EditableRangeStart, true)conisDeep: trueper trovare intervalli modificabili in qualsiasi punto del documento, non solo tra i figli immediati di un nodo. - Leggi
EditableRange.SingleUsereEditorGroupinsieme per determinare a chi è limitato un intervallo — un intervallo può essere limitato a un singolo utente specifico, a un gruppo di modifica, o a nessuno. - Invoca
EditableRange.Remove()(sulla facciata) anziché rimuovere i nodi marcatoreEditableRangeStarteEditableRangeEndsingolarmente, in modo che entrambe le estremità dell’intervallo vengano pulite in modo coerente.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| Non sono stati trovati intervalli modificabili nonostante il documento abbia la modifica limitata | La ricerca ha utilizzato la chiamata predefinita (superficiale) GetChildNodes | Passa isDeep: true in modo che la ricerca copra l’intero sottoalbero del documento |
| Rimuovere un intervallo modificabile non rimuove il testo racchiuso | EditableRange.Remove() rimuove solo i marcatori di intervallo e l’esenzione di modifica, non il contenuto tra di essi | Questo è previsto – elimina il contenuto separatamente se deve essere rimosso anche |
EditorGroup viene letto come Unspecified nonostante Word mostri un gruppo denominato | Il gruppo editor dell’intervallo nel documento di origine è mappato a EditorType.Unspecified/Default anziché a uno dei valori del gruppo denominato | Controlla anche SingleUser – l’intervallo potrebbe invece essere limitato a un singolo utente |
FAQ
Come trovo tutti gli intervalli modificabili in un documento?
Chiama Document.GetChildNodes(NodeType.EditableRangeStart, true), quindi leggi la proprietà EditableRange su ogni nodo EditableRangeStart restituito.
Come faccio a sapere chi è autorizzato a modificare un intervallo dato?
Leggi EditableRange.SingleUser (un utente specifico) e EditableRange.EditorGroup (un gruppo di modifica EditorType) sull’oggetto facciata.
Come rimuovo una restrizione di modifica da una parte di un documento?
Chiama Remove() sull’oggetto facciata EditableRange per quell’intervallo.
Qual è la differenza tra EditableRangeStart.EditableRange e EditableRangeEnd.EditableRangeStart?
EditableRangeStart.EditableRange raggiunge direttamente l’oggetto facciata che descrive l’intera gamma. EditableRangeEnd.EditableRangeStart risale al nodo marcatore di inizio corrispondente, dal quale EditableRange può quindi essere raggiunto.
API Reference Riepilogo
| Classe / Enum | Descrizione |
|---|---|
EditableRange | Facade per un intervallo modificabile: Id, SingleUser, EditorGroup, Remove() |
EditableRangeStart | Nodo che segna l’inizio di un intervallo; Id, EditableRange |
EditableRangeEnd | Nodo che segna la fine di un intervallo; Id, EditableRangeStart |
EditorType | Enum dei gruppi di modifica: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default |