通过 C# 复制 Word 文档、指定段落、指定节
1. 基础场景复制整个 Word 文档这是最直接的场景例如将源文档的所有内容文字、图片、表格、格式等完整复制到一个新文档或已有文档中。使用Clone()方法即可实现深度复制。using System; using Spire.Doc; namespace CopyWholeWordContent { class Program { static void Main(string[] args) { try { // 1. 加载源文档 Document sourceDoc new Document(); sourceDoc.LoadFromFile(C:\Users\Administrator\Desktop\源文档.docx); // 2. 克隆源文档创建独立副本 Document targetDoc sourceDoc.Clone(); // 3. 保存目标文档 targetDoc.SaveToFile(复制全文档内容.docx, FileFormat.Docx); // 释放资源 sourceDoc.Close(); targetDoc.Close(); Console.WriteLine(全文档内容复制完成); // 可选打开生成的文档查看结果 System.Diagnostics.Process.Start(复制全文档内容.docx); } catch (Exception ex) { Console.WriteLine($复制失败{ex.Message}); } } } }关键说明Clone()方法会完整复制文档的所有内容及格式生成一个独立的新文档对副本的修改不会影响源文档。添加了try-catch异常处理可捕获文件路径错误、权限不足、文档损坏等常见问题增强程序健壮性。使用Close()方法及时释放资源避免文件占用。2. 进阶场景复制指定 Word 段落有时我们只需提取文档中的某几个段落如摘要、结论并将其追加到另一个文档末尾。以下代码演示如何从源文档中提取指定索引的段落完整保留其格式字体、字号、颜色等并添加到目标文档的最后一个节。using System; using Spire.Doc; using Spire.Doc.Documents; namespace CopySpecificParagraphs { class Program { static void Main(string[] args) { try { // 1. 加载源文档 Document sourceDoc new Document(); sourceDoc.LoadFromFile(C:\Users\Administrator\Desktop\source.docx); // 2. 提取源文档中指定索引的段落索引从0开始此处提取第9个段落 Paragraph para sourceDoc.Sections[0].Paragraphs[8]; // 3. 加载目标文档已有文档 Document targetDoc new Document(); targetDoc.LoadFromFile(C:\Users\Administrator\Desktop\target.docx); // 4. 获取目标文档的最后一个节将段落添加到该节末尾 Section lastSection targetDoc.LastSection; // 5. 克隆并添加指定段落Clone()创建独立副本 lastSection.Paragraphs.Add((Paragraph)para.Clone()); // 6. 保存目标文档 targetDoc.SaveToFile(CopyParagraphs.docx, FileFormat.Docx2016); // 7. 释放资源 sourceDoc.Dispose(); targetDoc.Dispose(); Console.WriteLine(指定段落复制完成); } catch (Exception ex) { Console.WriteLine($复制失败{ex.Message}); } } } }关键说明索引注意Word 文档的节和段落均以 0 为起始索引Sections[0]表示第一节Paragraphs[8]表示该节中的第 9 个段落。请根据实际文档调整索引值。添加位置通过LastSection获取目标文档的最后一个节从而将段落追加到文档末尾。若需插入到指定位置可使用Sections[索引]定位目标节。Clone()方法核心所在创建段落的独立副本避免后续对源文档的修改影响已复制的内容。异常处理同样覆盖了常见错误如索引越界、文件不存在等。3. 进阶场景复制 Word 中指定节当需要复制整个节包括其中的段落、表格、图片等所有元素到目标文档时可以通过遍历节的子对象实现精确控制。这种方法比直接复制整个节更灵活便于按需跳过某些元素。using System; using Spire.Doc; using Spire.Doc.Documents; namespace CopySpecificSection { class Program { static void Main(string[] args) { try { // 1. 加载源文档 Document sourceDoc new Document(); sourceDoc.LoadFromFile(C:\Users\Administrator\Desktop\source.docx); // 2. 提取源文档中指定的节示例提取第1节索引0 Section sourceSection sourceDoc.Sections[0]; // 3. 加载目标文档 Document targetDoc new Document(); targetDoc.LoadFromFile(C:\Users\Administrator\Desktop\target.docx); // 4. 获取目标文档的最后一个节将内容添加到此节末尾 Section lastSection targetDoc.LastSection; // 5. 遍历源节正文的所有子对象段落、表格、图片等克隆后添加到目标节 foreach (DocumentObject obj in sourceSection.Body.ChildObjects) { lastSection.Body.ChildObjects.Add(obj.Clone()); } // 6. 保存文档并释放资源 targetDoc.SaveToFile(CopySection.docx, FileFormat.Docx2019); sourceDoc.Dispose(); targetDoc.Dispose(); Console.WriteLine(指定节内容复制完成); } catch (Exception ex) { Console.WriteLine($复制失败{ex.Message}); } } } }代码详解sourceSection.Body.ChildObjects节的Body属性包含该节的所有可见内容段落、表格、图片等ChildObjects集合提供了对这些元素的访问。循环克隆逐个克隆子对象并添加到目标节的ChildObjects集合中从而完整保留每个元素的格式和内容。遍历克隆可灵活过滤元素如跳过空段落、指定表格示例// 仅复制非空段落 if (obj is Paragraph para !string.IsNullOrEmpty(para.Text)) { lastSection.Body.ChildObjects.Add(obj.Clone()); }异常处理确保程序稳定性。4. 总结与注意事项通过以上三种方法你可以灵活应对各种 Word 文档内容复制的需求无需手动操作大幅提升处理效率。操作时需注意以下几点路径问题代码中的文件路径需替换为实际路径建议使用绝对路径或确保相对路径正确。索引越界在提取指定段落或节时务必确认索引值在有效范围内否则会引发异常。资源释放操作完成后及时调用Dispose()或Close()释放资源避免文件被锁定。格式保留Clone()方法是保留原始格式的关键切勿直接引用原对象。批量处理上述代码稍作修改即可循环处理多个文档实现批量复制。