Aspose.Words:如何添加另一个WORD文档中的Node对象

原文:Aspose.Words:如何添加另一个WORD文档中的Node对象

首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾:

1 var table = (Table)docSource.GetChild(NodeType.Table, 0, true);
2 docTarget.FirstSection.Body.ChildNodes.Add(table);

这段代码会抛出异常:“The newChild was created from a different document than the one that created this node.”,这是什么原因呢?

原因是,对于Aspose.Words的Node对象,它的一系列样式和格式的控制,取决于它所在的DocumentBase父对象,这也是很多Aspose.Words对象声明时,必须指定它的DocumentBase参数,比如声明一个Table,应该如下:

1 Document doc=new Document();
2 Table table=new Table(doc);

那么,我们有没有办法添加另一个文档中的对象呢?有,必须通过Document.ImportNode方法或者使用NodeImporter对象。

这两种方法思路都是将源文档中的Node导入到目标文档中,再追加Node到合适的位置。

Document.ImportNode

 1 /// <summary>
 2 /// A manual implementation of the Document.AppendDocument function which shows the general
 3 /// steps of how a document is appended to another.
 4 /// </summary>
 5 /// <param name="dstDoc">The destination document where to append to.</param>
 6 /// <param name="srcDoc">The source document.</param>
 7 /// <param name="mode">The import mode to use when importing content from another document.</param>
 8 public void AppendDocument(Document dstDoc, Document srcDoc, ImportFormatMode mode)
 9 {
10     // Loop through all sections in the source document.
11     // Section nodes are immediate children of the Document node so we can just enumerate the Document.
12     foreach (Section srcSection in srcDoc)
13     {
14         // Because we are copying a section from one document to another,
15         // it is required to import the Section node into the destination document.
16         // This adjusts any document-specific references to styles, lists, etc.
17         //
18         // Importing a node creates a copy of the original node, but the copy
19         // is ready to be inserted into the destination document.
20         Node dstSection = dstDoc.ImportNode(srcSection, true, mode);
21
22         // Now the new section node can be appended to the destination document.
23         dstDoc.AppendChild(dstSection);
24     }
25 }

NodeImporter

 1 public static Document GenerateDocument(Document srcDoc, ArrayList nodes)
 2         {
 3             // Create a blank document.
 4             Document dstDoc = new Document();
 5             // Remove the first paragraph from the empty document.
 6             dstDoc.FirstSection.Body.RemoveAllChildren();
 7
 8             // Import each node from the list into the new document. Keep the original formatting of the node.
 9             NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting);
10
11             foreach (Node node in nodes)
12             {
13                 Node importNode = importer.ImportNode(node, true);
14                 dstDoc.FirstSection.Body.AppendChild(importNode);
15             }
16
17             // Return the generated document.
18             return dstDoc;
19         }

参考文档:

http://www.aspose.com/docs/display/wordsnet/Aspose.Words.DocumentBase.ImportNode+Overload_1

时间: 2024-08-09 06:32:50

Aspose.Words:如何添加另一个WORD文档中的Node对象的相关文章

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

Word文档中的语法高亮显示代码

有时候我们程序员也需要在word文档里面显示代码,但是直接复制过去 不好看,格式也不太对,这里给大家分享一个Word文档中的语法高亮显示代码的方法 http://www.planetb.ca/syntax-highlight-word 把要粘贴到文档的代码复制过来,选择对应的语言,然后点击Show Highlighted 然后再把转换后的代码复制到word文档就搞定了! 原文地址:https://www.cnblogs.com/blibli/p/9092670.html

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

C# 复制一个Word文档的部分或全部内容到另一个Word文档

C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程序那就更好了. 扯远了,回到正题.复制文档内容这个功能太常见啦,在微软Word中实现这个功能很简单,只需要复制和粘贴就行了.这篇文章的主要目的是记录如何用C#来实现复制一个Word文档的部分或全部内容到另一个word文档,废话不多说,下面开始. 第一部分:复制部分内容: 在我的这个示例中,复制部分内

如何在word文档中添加mathtype加载项

MathType是强大的数学公式编辑器,通常与office一起使用,mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtype并没有加载到word文档中,本教程将教您解决如何手动添加mathtype加载项.        原因分析        这是因为word文档中缺少startup文件,只需要在word文档的安装目录下手动添加一个startup文件夹即可解决.        解决方案        步骤一 将安装好的

C# 如何添加表格到Word文档

表格是组织整理数据的一种重要手段,应在生活中的方方面面.在Word文档中将繁杂的文字表述内容表格化,能快速.直接地获取关键内容信息.那么,通过C#,我们也可以在Word文档中添加表格,这里将介绍两种不同的表格添加方法. 使用工具:Spire.Doc for .NET 使用方法:安装后,添加引用dll文件到项目中即可 表格添加方法一:动态地向Word添加表格行和单元格内容,需调用方法section. AddTable().table. AddRow和row. AddCell() using Sys

C# 在Word文档中生成条

简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书还是各种商品上都随处可见,扫描条形码就可以查询这个商品的信息,非常方便. 生成 生成条形码分为两步,第一步需要先下载并在系统上安装条形码字体,安装条形码字体的步骤如下: 1.条形码的字体有很多种,如code39,code128等,网上有很多条形码字体,根据自己的需要选择条形码字体下载,然后在开始->运行里输入C:\Windows\F

ASP.Net控制不同的人编辑word文档中不同的可编辑区域

ASP.Net控制不同的人编辑word文档中不同的可编辑区域的完整示例 2010-10-15 11:43238人阅读评论(0)收藏举报 网页来源:http://blog.csdn.net/coco99/article/details/5942895 本文演示了如何使用C#在ASP.NET里调用Word限制用户只能编辑word文档中自己有权编辑的区域. 1.项目目的 演示使用不同的用户登录系统,打开同一个文件(不必同时打开),可以编辑的区域不一样,每个人都有属于自己的编辑区域. 2.解决思路 利用

将图片文字转换到Word文档中的简单方法

怎样将图片文字转换到Word文档呢?很多人在处理图片文件需要将文字整理到Word文档中的时候都比较头疼,如果单纯靠手动录入的方式简直太麻烦了,下面小编就来为大家分享一种简单的转换方法,一起来看看吧! 辅助工具:电脑 迅捷OCR文字识别软件 实用系数:☆☆☆☆☆ 推荐理由:该软件是一款智能化的OCR图片文字识别软件,支持PDF识别.扫描件识别.图片文字识别.CAJ识别.票证识别.图片局部识别等功能,快速解析.精准识别. 操作步骤: 1:先在电脑中将待会需要使用到的文字识别软件打开,关闭自动弹窗,这