Praca z edytowalnymi zakresami
Praca z zakresami edytowalnymi
Ten przewodnik pokazuje, jak przeglądać i usuwać zakresy edytowalne — regiony, które funkcja Worda „Restrict Editing” wyłącza z ogólnego ograniczenia edycji dokumentu, opcjonalnie ograniczone do konkretnego użytkownika lub grupy — w Aspose.Words FOSS dla .NET. Zakres edytowalny jest otoczony w drzewie dokumentu parą węzłów znaczników, EditableRangeStart and EditableRangeEnd, i opisany w całości przez EditableRange klasę fasadową.
Wyszukiwanie zakresów edytowalnych w dokumencie
Nie istnieje pojedyncza właściwość kolekcji dla zakresów edytowalnych; należy je znaleźć, przeglądając drzewo węzłów. CompositeNode.GetChildNodes(nodeType, isDeep) z NodeType.EditableRangeStart zwraca każdy węzeł EditableRangeStart w dokumencie (lub w poddrzewie, jeśli wywołano na węźle innym niż Document). Każda właściwość EditableRangeStart.EditableRange zwraca następnie odpowiadający obiekt fasady EditableRange.
Fasada EditableRange
EditableRange opisuje pojedynczy zakres edytowalny jako całość: Id go identyfikuje, SingleUser opcjonalnie podaje nazwę konkretnego użytkownika uprawnionego do edycji, a EditorGroup (wartość EditorType) opcjonalnie podaje nazwę grupy edytującej zamiast tego. EditableRangeStart i EditableRangeEnd zwracają parę węzłów znacznika, które otaczają zakres w dokumencie. EditableRange.Remove() usuwa zakres edytowalny — znosząc zwolnienie z ograniczenia edycji dla tego regionu, bez usuwania zawartości dokumentu wewnątrz niego.
Węzły znacznika: EditableRangeStart i EditableRangeEnd
EditableRangeStart i EditableRangeEnd są zamkniętymi podklasami Node, które oznaczają granice zakresu w przepływie treści dokumentu. EditableRangeStart.Id i EditableRangeEnd.Id identyfikują zakres; EditableRangeStart.EditableRange odwołuje się bezpośrednio do obiektu fasady, a EditableRangeEnd.EditableRangeStart odwołuje się do odpowiadającego znacznika początkowego. Będąc zwykłymi węzłami, oba obsługują standardowe Node — ParentNode, Document, PreviousSibling, NextSibling i Remove(), aby usunąć pojedynczy znacznik.
Ograniczanie dostępu za pomocą EditorType
EditorType wymienia grupy edycyjne, które EditableRange.EditorGroup może odwoływać: Administrators, Contributors, Editors, Owners, Everyone, Current, None i Unspecified (dostępne także jako Default, alias dla Unspecified).
Wskazówki i najlepsze praktyki
- Użyj
GetChildNodes(NodeType.EditableRangeStart, true)zisDeep: true, aby znaleźć edytowalne zakresy w dowolnym miejscu dokumentu, a nie tylko wśród bezpośrednich potomków węzła. - Przeczytaj
EditableRange.SingleUseriEditorGrouprazem, aby określić, do kogo zakres jest ograniczony — zakres może być przypisany jednemu konkretnemu użytkownikowi, jednej grupie edycyjnej lub żadnemu. - Wywołaj
EditableRange.Remove()(na fasadzie) zamiast usuwać poszczególne węzły znacznikaEditableRangeStartiEditableRangeEnd, aby oba końce zakresu były czyszczone konsekwentnie.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| Nie znaleziono zakresów edytowalnych, mimo że dokument ma ograniczoną edycję | Wyszukiwanie użyło domyślnego (płytkiego) wywołania GetChildNodes | Przekaż isDeep: true, aby wyszukiwanie obejmowało całe poddrzewo dokumentu |
| Usunięcie zakresu edytowalnego nie usuwa zawartego tekstu | EditableRange.Remove() usuwa tylko znaczniki zakresu i zwolnienie z edycji, a nie zawartość pomiędzy nimi | To jest oczekiwane – usuń zawartość osobno, jeśli również ma zostać usunięta |
EditorGroup odczytuje się jako Unspecified, mimo że Word wyświetla grupę nazwaną | Grupa edytora zakresu w dokumencie źródłowym mapuje się na EditorType.Unspecified/Default, a nie na jedną z wartości grupy nazwanej | Sprawdź także SingleUser – zakres może być zamiast tego ograniczony do pojedynczego użytkownika |
FAQ
Jak znaleźć wszystkie edytowalne zakresy w dokumencie?
Wywołaj Document.GetChildNodes(NodeType.EditableRangeStart, true), a następnie odczytaj właściwość EditableRange na każdym zwróconym węźle EditableRangeStart.
Jak sprawdzić, kto ma uprawnienia do edycji danego zakresu?
Odczytaj EditableRange.SingleUser (konkretnego użytkownika) oraz EditableRange.EditorGroup (grupę edytującą EditorType) na obiekcie fasady.
Jak usunąć ograniczenie edycji z części dokumentu?
Wywołaj Remove() na obiekcie fasady EditableRange dla tego zakresu.
Jaka jest różnica między EditableRangeStart.EditableRange a EditableRangeEnd.EditableRangeStart?
EditableRangeStart.EditableRange bezpośrednio dociera do obiektu fasady opisującego cały zakres. EditableRangeEnd.EditableRangeStart cofa się do odpowiadającego węzła znacznika początkowego, z którego można następnie dotrzeć do EditableRange.
API Reference Podsumowanie
| Klasa / Enum | Opis |
|---|---|
EditableRange | Fasada dla jednego edytowalnego zakresu: Id, SingleUser, EditorGroup, Remove() |
EditableRangeStart | Węzeł oznaczający początek zakresu; Id, EditableRange |
EditableRangeEnd | Węzeł oznaczający koniec zakresu; Id, EditableRangeStart |
EditorType | Wyliczenie grup edycji: Administrators, Contributors, Editors, Owners, Everyone, Current, None, Unspecified/Default |