ReplaceAction Enumeration

Allows the user to specify what happens to the current match during a replace operation.

Namespace:  Aspose.Words.Replacing
Assembly:  Aspose.Words (in Aspose.Words.dll) Version: 20.9.0


public enum ReplaceAction


  Member nameValueDescription
Replace0 Replace the current match.
Skip1 Skip the current match.
Stop2 Terminate the replace operation.


Shows how to insert content of one document into another during a customized find and replace operation.
public void InsertDocumentAtReplace()
    Document mainDoc = new Document(MyDir + "Document insertion destination.docx");

    FindReplaceOptions options = new FindReplaceOptions();
    options.Direction = FindReplaceDirection.Backward;
    options.ReplacingCallback = new InsertDocumentAtReplaceHandler();

    mainDoc.Range.Replace(new Regex("\\[MY_DOCUMENT\\]"), "", options);
    mainDoc.Save(ArtifactsDir + "InsertDocument.InsertDocumentAtReplace.docx");


private class InsertDocumentAtReplaceHandler : IReplacingCallback
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
        Document subDoc = new Document(MyDir + "Document.docx");

        // Insert a document after the paragraph, containing the match text
        Paragraph para = (Paragraph)args.MatchNode.ParentNode;
        InsertDocument(para, subDoc);

        // Remove the paragraph with the match text

        return ReplaceAction.Skip;

/// <summary>
/// Inserts content of the external document after the specified node.
/// </summary>
static void InsertDocument(Node insertionDestination, Document docToInsert)
    // Make sure that the node is either a paragraph or table
    if (insertionDestination.NodeType.Equals(NodeType.Paragraph) || insertionDestination.NodeType.Equals(NodeType.Table))
        // We will be inserting into the parent of the destination paragraph
        CompositeNode dstStory = insertionDestination.ParentNode;

        // This object will be translating styles and lists during the import
        NodeImporter importer =
            new NodeImporter(docToInsert, insertionDestination.Document, ImportFormatMode.KeepSourceFormatting);

        // Loop through all block level nodes in the body of the section
        foreach (Section srcSection in docToInsert.Sections.OfType<Section>())
            foreach (Node srcNode in srcSection.Body)
                // Skip the node if it is a last empty paragraph in a section
                if (srcNode.NodeType.Equals(NodeType.Paragraph))
                    Paragraph para = (Paragraph)srcNode;
                    if (para.IsEndOfSection && !para.HasChildNodes)

                // This creates a clone of the node, suitable for insertion into the destination document
                Node newNode = importer.ImportNode(srcNode, true);

                // Insert new node after the reference node
                dstStory.InsertAfter(newNode, insertionDestination);
                insertionDestination = newNode;
        throw new ArgumentException("The destination node should be either a paragraph or table.");

See Also