Práce s editovatelnými oblastmi
Práce s editovatelnými oblastmi
Tento návod ukazuje, jak prohlížet a odstraňovat editovatelné oblasti – regiony, které funkce Wordu „Restrict Editing“ vylučuje z celkového omezení úprav dokumentu, volitelně omezené na konkrétního uživatele nebo skupinu – v Aspose.Words FOSS pro .NET. Editovatelný rozsah je v stromu dokumentu ohraničen dvojicí značkových uzlů, EditableRangeStart and EditableRangeEnd, a jako celek je popisován pomocí EditableRange třídy fasády.
Vyhledávání editovatelných oblastí v dokumentu
Neexistuje jediná vlastnost kolekce pro editovatelné oblasti; najdete je procházením stromu uzlů. CompositeNode.GetChildNodes(nodeType, isDeep) s NodeType.EditableRangeStart vrací každý EditableRangeStart uzel v dokumentu (nebo v podstromu, pokud je voláno na uzlu jiném než Document). Každá vlastnost EditableRangeStart.EditableRange pak vrací odpovídající fasádní objekt EditableRange.
Fasáda EditableRange
EditableRange popisuje jednu editovatelnou oblast jako celek: Id ji identifikuje, SingleUser volitelně pojmenovává konkrétního uživatele, který ji může upravovat, a EditorGroup (hodnota typu EditorType) volitelně pojmenovává místo toho skupinu upravovatelů. EditableRangeStart a EditableRangeEnd vracejí dvojici značkovacích uzlů, které oblast v dokumentu ohraničují. EditableRange.Remove() odstraňuje editovatelnou oblast – zruší výjimku z omezení úprav pro tento region, aniž by smazal obsah dokumentu uvnitř ní.
Značkové uzly: EditableRangeStart a EditableRangeEnd
EditableRangeStart a EditableRangeEnd jsou uzavřené podtřídy Node, které označují hranice rozsahu v toku obsahu dokumentu. EditableRangeStart.Id a EditableRangeEnd.Id identifikují rozsah; EditableRangeStart.EditableRange dosahuje přímo objektu fasády a EditableRangeEnd.EditableRangeStart se vrací k odpovídajícímu počátečnímu značkovači. Jako běžné uzly oba podporují standardní členy Node – ParentNode, Document, PreviousSibling, NextSibling a Remove() pro smazání jednotlivého značkovače.
Omezení přístupu pomocí EditorType
EditorType vypisuje editační skupiny, na které může odkazovat EditableRange.EditorGroup: Administrators, Contributors, Editors, Owners, Everyone, Current, None a Unspecified (také k dispozici jako Default, alias pro Unspecified).
Tipy a osvědčené postupy
- Použijte
GetChildNodes(NodeType.EditableRangeStart, true)sisDeep: truek nalezení editovatelných rozsahů kdekoli v dokumentu, nejen mezi okamžitými potomky uzlu. - Přečtěte si
EditableRange.SingleUseraEditorGroupspolečně, abyste určili, na koho je rozsah omezen – rozsah může být omezen na jednoho konkrétního uživatele, jednu editační skupinu nebo na nikoho. - Zavolejte
EditableRange.Remove()(na fasádě) místo odstraňování uzlů značkovačůEditableRangeStartaEditableRangeEndjednotlivě, aby oba konce rozsahu byly důsledně vyčištěny.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Nebyla nalezena žádná editovatelná oblast, i když má dokument omezené úpravy | Vyhledávání použilo výchozí (povrchní) GetChildNodes volání | Předejte isDeep: true, aby vyhledávání zahrnovalo celý podstrom dokumentu |
| Odstranění editovatelné oblasti neodstraní obsažený text | EditableRange.Remove() odstraňuje pouze značky oblasti a výjimku úprav, ne obsah mezi nimi | Je to očekávané – obsah odstraňte samostatně, pokud má být také smazán |
EditorGroup se čte jako Unspecified, i když Word zobrazuje pojmenovanou skupinu | Editorová skupina oblasti ve zdrojovém dokumentu se mapuje na EditorType.Unspecified/Default místo jedné z hodnot pojmenované skupiny | Zkontrolujte také SingleUser – rozsah může být místo toho omezen na jednotlivého uživatele |
FAQ
Jak najdu všechny editovatelné rozsahy v dokumentu?
Zavolejte Document.GetChildNodes(NodeType.EditableRangeStart, true), poté přečtěte vlastnost EditableRange u každého vráceného uzlu EditableRangeStart.
Jak zjistím, kdo má povoleno upravovat daný rozsah?
Přečtěte EditableRange.SingleUser (konkrétní uživatel) a EditableRange.EditorGroup (editační skupina EditorType) na objektu fasády.
Jak odstraním omezení úprav z části dokumentu?
Zavolejte Remove() na objektu fasády EditableRange pro tento rozsah.
Jaký je rozdíl mezi EditableRangeStart.EditableRange a EditableRangeEnd.EditableRangeStart?
EditableRangeStart.EditableRange dosahuje přímo k facade objektu popisujícímu celý rozsah. EditableRangeEnd.EditableRangeStart se vrací k odpovídajícímu uzlu startovního markeru, ze kterého lze poté dosáhnout EditableRange.
API Reference Shrnutí
| Třída / Enum | Popis: |
|---|---|
EditableRange | Fasáda pro jeden editovatelný rozsah: Id, SingleUser, EditorGroup, Remove() |
EditableRangeStart | Uzel označující začátek rozsahu; Id, EditableRange |
EditableRangeEnd | Uzel označující konec rozsahu; Id, EditableRangeStart |
EditorType | Výčet editačních skupin: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default |