EditableRangeStart Class |
Namespace: Aspose.Words
The EditableRangeStart type exposes the following members.
Name | Description | |
---|---|---|
![]() ![]() | Document |
Gets the document to which this node belongs.
(Inherited from Node.) |
![]() ![]() | EditableRange |
Gets the facade object that encapsulates this editable range start and end.
|
![]() ![]() | Id |
Specifies the identifier of the editable range.
|
![]() ![]() | IsComposite |
Returns true if this node can contain other nodes.
(Inherited from Node.) |
![]() ![]() | NextSibling |
Gets the node immediately following this node.
(Inherited from Node.) |
![]() ![]() | NodeType |
Returns EditableRangeStart.
(Overrides NodeNodeType.) |
![]() ![]() | ParentNode |
Gets the immediate parent of this node.
(Inherited from Node.) |
![]() ![]() | PreviousSibling |
Gets the node immediately preceding this node.
(Inherited from Node.) |
![]() ![]() | Range |
Returns a Range object that represents the portion of a document that is contained in this node.
(Inherited from Node.) |
Name | Description | |
---|---|---|
![]() ![]() | Accept |
Accepts a visitor.
(Overrides NodeAccept(DocumentVisitor).) |
![]() ![]() | Clone | (Inherited from Node.) |
![]() | Equals | (Inherited from Object.) |
![]() ![]() | GetAncestor(Type) |
Gets the first ancestor of the specified object type.
(Inherited from Node.) |
![]() ![]() | GetAncestor(NodeType) |
Gets the first ancestor of the specified NodeType.
(Inherited from Node.) |
![]() | GetHashCode | (Inherited from Object.) |
![]() ![]() | GetText |
Gets the text of this node and of all its children.
(Inherited from Node.) |
![]() | GetType | (Inherited from Object.) |
![]() ![]() | NextPreOrder |
Gets next node according to the pre-order tree traversal algorithm.
(Inherited from Node.) |
![]() ![]() | PreviousPreOrder |
Gets the previous node according to the pre-order tree traversal algorithm.
(Inherited from Node.) |
![]() ![]() | Remove |
Removes itself from the parent.
(Inherited from Node.) |
![]() | ToString | (Inherited from Object.) |
![]() ![]() | ToString(SaveFormat) |
Exports the content of the node into a string in the specified format.
(Inherited from Node.) |
![]() ![]() | ToString(SaveOptions) |
Exports the content of the node into a string using the specified save options.
(Inherited from Node.) |
A complete editable range in a Word document consists of a EditableRangeStart and a matching EditableRangeEnd with the same Id.
EditableRangeStart and EditableRangeEnd are just markers inside a document that specify where the editable range starts and ends.
Use the EditableRange class as a "facade" to work with an editable range as a single object.
![]() |
---|
Currently editable ranges are supported only at the inline-level, that is inside Paragraph, but editable range start and editable range end can be in different paragraphs. |
public void CreateEditableRanges() { Document doc = new Document(MyDir + "Document.docx"); DocumentBuilder builder = new DocumentBuilder(doc); // Start an editable range EditableRangeStart edRange1Start = builder.StartEditableRange(); // An EditableRange object is created for the EditableRangeStart that we just made EditableRange editableRange1 = edRange1Start.EditableRange; // Put something inside the editable range builder.Writeln("Paragraph inside first editable range"); // An editable range is well-formed if it has a start and an end // Multiple editable ranges can be nested and overlapping EditableRangeEnd edRange1End = builder.EndEditableRange(); // Explicitly state which EditableRangeStart a new EditableRangeEnd should be paired with EditableRangeStart edRange2Start = builder.StartEditableRange(); builder.Writeln("Paragraph inside second editable range"); EditableRange editableRange2 = edRange2Start.EditableRange; EditableRangeEnd edRange2End = builder.EndEditableRange(edRange2Start); // Editable range starts and ends have their own respective node types Assert.AreEqual(NodeType.EditableRangeStart, edRange1Start.NodeType); Assert.AreEqual(NodeType.EditableRangeEnd, edRange1End.NodeType); // Editable range IDs are unique and set automatically Assert.AreEqual(0, editableRange1.Id); Assert.AreEqual(1, editableRange2.Id); // Editable range starts and ends always belong to a range Assert.AreEqual(edRange1Start, editableRange1.EditableRangeStart); Assert.AreEqual(edRange1End, editableRange1.EditableRangeEnd); // They also inherit the ID of the entire editable range that they belong to Assert.AreEqual(editableRange1.Id, edRange1Start.Id); Assert.AreEqual(editableRange1.Id, edRange1End.Id); Assert.AreEqual(editableRange2.Id, edRange2Start.EditableRange.Id); Assert.AreEqual(editableRange2.Id, edRange2End.EditableRangeStart.EditableRange.Id); // If the editable range was found in a document, it will probably have something in the single user property // But if we make one programmatically, the property is empty by default Assert.AreEqual(string.Empty, editableRange1.SingleUser); // We have to set it ourselves if we want the ranges to belong to somebody editableRange1.SingleUser = "john.doe@myoffice.com"; editableRange2.SingleUser = "jane.doe@myoffice.com"; // Initialize a custom visitor for editable ranges that will print their contents EditableRangeInfoPrinter editableRangeReader = new EditableRangeInfoPrinter(); // Both the start and end of an editable range can accept visitors, but not the editable range itself edRange1Start.Accept(editableRangeReader); edRange2End.Accept(editableRangeReader); // Or, if we want to go over all the editable ranges in a document, we can get the document to accept the visitor editableRangeReader.Reset(); doc.Accept(editableRangeReader); Console.WriteLine(editableRangeReader.ToText()); } /// <summary> /// Visitor implementation that prints attributes and contents of ranges. /// </summary> public class EditableRangeInfoPrinter : DocumentVisitor { public EditableRangeInfoPrinter() { mBuilder = new StringBuilder(); } public string ToText() { return mBuilder.ToString(); } public void Reset() { mBuilder.Clear(); mInsideEditableRange = false; } /// <summary> /// Called when an EditableRangeStart node is encountered in the document. /// </summary> public override VisitorAction VisitEditableRangeStart(EditableRangeStart editableRangeStart) { mBuilder.AppendLine(" -- Editable range found! -- "); mBuilder.AppendLine("\tID: " + editableRangeStart.Id); mBuilder.AppendLine("\tUser: " + editableRangeStart.EditableRange.SingleUser); mBuilder.AppendLine("\tContents: "); mInsideEditableRange = true; // Let the visitor continue visiting other nodes return VisitorAction.Continue; } /// <summary> /// Called when an EditableRangeEnd node is encountered in the document. /// </summary> public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd) { mBuilder.AppendLine(" -- End of editable range -- "); mInsideEditableRange = false; // Let the visitor continue visiting other nodes return VisitorAction.Continue; } /// <summary> /// Called when a Run node is encountered in the document. Only runs within editable ranges have their contents recorded. /// </summary> public override VisitorAction VisitRun(Run run) { if (mInsideEditableRange) mBuilder.AppendLine("\t\"" + run.Text + "\""); // Let the visitor continue visiting other nodes return VisitorAction.Continue; } private bool mInsideEditableRange; private readonly StringBuilder mBuilder; }