Aspose.Words 將word2中的內容插入到word1中的指定位置

Hi.wz發表於2018-11-15

將word2中的內容插入到word1中的指定位置(經測試可用)

在官網找到的例子,記錄一下:

        public static void InsertDocumentAtBookmark(string dataDir)
        {
            Document mainDoc = new Document(dataDir + "InsertDocument1.doc");
            Document subDoc = new Document(dataDir + "InsertDocument2.doc");

            //定位到書籤:insertionPlace
            Bookmark bookmark = mainDoc.Range.Bookmarks["insertionPlace"];
            //將subDoc中的內容插入到mainDoc中的書籤“insertionPlace”位置
            InsertDocument(bookmark.BookmarkStart.ParentNode, subDoc);
            dataDir = dataDir + "InsertDocumentAtBookmark_out.doc";
            mainDoc.Save(dataDir);
        }

        /// <summary>
        /// 在指定節點之後插入外部文件的內容。
        /// 插入文件的分節符和節格式將被忽略。
        /// </summary>
        /// <param name="insertAfterNode">Node in the destination document after which the content
        /// Should be inserted. This node should be a block level node (paragraph or table).</param>
        /// <param name="srcDoc">The document to insert.</param>
        static void InsertDocument(Node insertAfterNode, Document srcDoc)
        {
            // Make sure that the node is either a paragraph or table.
            if ((!insertAfterNode.NodeType.Equals(NodeType.Paragraph)) &
              (!insertAfterNode.NodeType.Equals(NodeType.Table)))
                throw new ArgumentException("The destination node should be either a paragraph or table.");

            // We will be inserting into the parent of the destination paragraph.
            CompositeNode dstStory = insertAfterNode.ParentNode;

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

            // Loop through all sections in the source document.
            foreach (Section srcSection in srcDoc.Sections)
            {
                // Loop through all block level nodes (paragraphs and tables) in the body of the section.
                foreach (Node srcNode in srcSection.Body)
                {
                    // Let`s 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)
                            continue;
                    }

                    // 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, insertAfterNode);
                    insertAfterNode = newNode;
                }
            }
        }

 

相關文章