当前位置: 首页 > news >正文

使用 C# 复制 Word 文档内容 - 页面、节、段落、表格、页眉页脚等

目录

使用的库及安装方式

使用 C# 复制或备份整个 Word 文档

使用 C# 导入一个Word文档的内容到另一个文档

使用 C# 在Word文档之间复制页面

使用 C# 在Word文档之间复制节

使用 C# 在Word文档之间复制段落

使用 C# 在Word文档之间复制表格

使用 C# 在Word文档之间复制页眉和页脚

总结


在日常办公中,我们经常需要在 Word 文档之间复制内容。例如制作文档备份、合并报告、提取章节或复用模板。手动复制粘贴不仅效率低,还容易出现错误。通过 C# 编程来实现自动化复制,可以保证内容和样式一致,大幅提升工作效率。

本文将介绍如何使用 C# 复制 Word 文档的内容并保留格式,包括备份整份文档,复制页面、节、段落、表格以及页眉页脚等,并附带完整代码示例和详细解析。主要涵盖内容如下:

  • 使用 C# 复制或备份整个 Word 文档
  • 使用 C# 导入一个Word文档的内容到另一个文档
  • 使用 C# 在Word文档之间复制页面
  • 使用 C# 在Word文档之间复制节
  • 使用 C# 在Word文档之间复制段落
  • 使用 C# 在Word文档之间复制表格
  • 使用 C# 在Word文档之间复制页眉和页脚

使用的库及安装方式

要在 C# 中复制 Word 文档内容,需要使用合适的Word文档处理库。本文使用的是 Free Spire.Doc for .NET,它提供了完整的 Word 操作功能,包括文档备份、复制页面、节、段落和表格等,并能保持格式一致。

安装方式
在 NuGet 包管理器控制台中运行以下命令:

Install-Package FreeSpire.Doc

安装完成后,在代码中引用 Spire.Doc 命名空间即可操作 Word 文档。

使用 C# 复制或备份整个 Word 文档

一个 Word 文档可能包含复杂的格式、表格、图片和页眉页脚。当你需要创建文档备份或快速生成多个版本时,复制整个文档是最直接有效的方式。使用 Document.Clone()方法,可以快速完成文档复制。

实现代码:

using Spire.Doc;namespace CopyDocument
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Original.docx");using (Document clonedDoc = sourceDoc.Clone()){clonedDoc.SaveToFile("Copy.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • Document sourceDoc = new Document():创建 Word 文档对象。
  • LoadFromFile("Original.docx"):加载本地 Word 文件。
  • sourceDoc.Clone():克隆整个文档,包括文本、表格、图片、页眉页脚和样式等。
  • SaveToFile():将克隆文档保存为新文件。
  • FileFormat.Docx2016:指定保存的文档格式为Word 2016。

使用 C# 导入一个Word文档的内容到另一个文档

在合并报告或整合多个章节时,经常需要将一个文档的内容整合到另一个文档中。通过使用 Document.ImportContent 方法,可以轻松将源文档的所有内容,包括文本、段落、表格、图片及样式,完整导入到目标文档中,同时保持原有格式和排版一致,从而快速实现文档内容的整合与复用。

实现代码:

using Spire.Doc;namespace ImportDocumentContent
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Source.docx");using (Document destDoc = new Document()){destDoc.LoadFromFile("Target.docx");destDoc.ImportContent(sourceDoc, true);destDoc.SaveToFile("Merged.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • ImportContent(sourceDoc, true):核心方法,导入源文档的内容和样式。

使用 C# 在Word文档之间复制页面

虽然 Word 文档是按节划分,而不是按页面,但在实际应用中,开发者经常需要提取特定页面的内容,例如章节、摘要或报告片段。直接复制节可能无法精确控制页数或页面范围,因此需要按“页面”来处理内容。

通过使用 FixedLayoutDocument 类,可以将 Word 的流式布局转换为固定页面布局,从而获取每一页并复制其具体内容。

实现代码:

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Pages;namespace CopyPage
{	class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("CopyPages_Source.docx");FixedLayoutDocument layoutDoc = new FixedLayoutDocument(sourceDoc);FixedLayoutPage page = layoutDoc.Pages[0]; // 获取第一页Section originalSection = page.Section;Paragraph firstParagraph = page.Columns[0].Lines[0].Paragraph;int startIndex = firstParagraph != null ? originalSection.Body.ChildObjects.IndexOf(firstParagraph) : 0;Paragraph lastParagraph = page.Columns[0].Lines[page.Columns[0].Lines.Count - 1].Paragraph;int endIndex = lastParagraph != null ? originalSection.Body.ChildObjects.IndexOf(lastParagraph) : originalSection.Body.ChildObjects.Count - 1;using (Document newDoc = new Document()){Section newSection = newDoc.AddSection();for (int i = startIndex; i <= endIndex; i++)newSection.Body.ChildObjects.Add(originalSection.Body.ChildObjects[i].Clone());originalSection.CloneSectionPropertiesTo(newSection);sourceDoc.CloneDefaultStyleTo(newDoc);sourceDoc.CloneThemesTo(newDoc);sourceDoc.CloneCompatibilityTo(newDoc);newDoc.SaveToFile("CopyPages_Result.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • FixedLayoutDocument:将流式布局的Word文档转换为固定页面布局,提供页面访问能力。
  • 在复制页面内容到新的文档时,注意复制源文档的节属性、文档的样式和主题等,以保持格式一致。

使用 C# 在Word文档之间复制节

Word 文档可能包含多个节,每个节可以拥有独立的页面设置、页眉页脚和格式。复制节适用于将大块内容完整插入到另一个文档中,同时保留原节的独特布局和样式。相比逐段复制,复制整个节可以更高效地保持页面设置和排版一致性。通过使用Document.ImportSection或Section.Clone()方法,可以快速完成节的复制。

实现代码:

using Spire.Doc;namespace CopySection
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Source.docx");using (Document destDoc = new Document()){destDoc.LoadFromFile("Target.docx");Section sourceSection = sourceDoc.Sections[0];destDoc.ImportSection(sourceSection);sourceDoc.CloneDefaultStyleTo(destDoc);sourceDoc.CloneThemesTo(destDoc);sourceDoc.CloneCompatibilityTo(destDoc);destDoc.SaveToFile("CopySections_Result.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • ImportSection:可以将整个节复制到目标文档中,保持页面设置和格式。
  • CloneDefaultStyleTo、CloneThemesTo、CloneCompatibilityTo:用于保持文档风格和兼容性。

使用 C# 在Word文档之间复制段落

在很多场景中,只需文档中的特定文本,例如引言、摘要或重要段落。复制段落能够精确提取所需内容,并保持原有格式,使其可以直接用于其他文档或生成新的报告。使用Paragraph对象的Clone()方法,可以实现对指定段落的快速复制。

实现代码:

using Spire.Doc;namespace CopyParagraph
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Source.docx");using (Document destDoc = new Document()){destDoc.LoadFromFile("Target.docx");Section sourceSection = sourceDoc.Sections[0];for (int i = 0; i < 3; i++)destDoc.LastSection.Body.ChildObjects.Add(sourceSection.Paragraphs[i].Clone());sourceSection.CloneSectionPropertiesTo(destDoc.LastSection);sourceDoc.CloneDefaultStyleTo(destDoc);sourceDoc.CloneThemesTo(destDoc);sourceDoc.CloneCompatibilityTo(destDoc);destDoc.SaveToFile("CopyParagraphs_Result.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • Paragraph.Clone() 克隆单个段落对象,包括文本和格式。
  • 可选择复制段落范围或特定段落。
  • 注意复制节属性和文档风格,确保目标文档格式一致。

使用 C# 在Word文档之间复制表格

Word 表格通常用于组织结构化数据,保持其格式、单元格合并和样式一致非常重要。复制表格可以确保数据和排版完整迁移,同时避免手动重建表格的繁琐操作。通过使用Table.Clone()方法,可以快速实现对特定表格的复制。

实现代码:

using Spire.Doc;namespace CopyTable
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Source.docx");using (Document destDoc = new Document()){destDoc.LoadFromFile("Target.docx");Table table = sourceDoc.Sections[0].Tables[0] as Table;destDoc.LastSection.Body.ChildObjects.Add(table.Clone());sourceDoc.CloneDefaultStyleTo(destDoc);sourceDoc.CloneThemesTo(destDoc);sourceDoc.CloneCompatibilityTo(destDoc);destDoc.SaveToFile("CopyTables_Result.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • Table.Clone() 复制整个表格对象,包括合并单元格、样式和内容。
  • 可直接添加到目标文档的最后一节或指定节中。

使用 C# 在Word文档之间复制页眉和页脚

页眉和页脚通常包含页码、文档标题或品牌信息。复制页眉页脚可以在创建多个文档或模板时保持风格一致,确保整个文档集具有统一的外观和专业感。

实现代码:

using Spire.Doc;
using Spire.Doc.Documents;namespace CopyHeaderFooter
{class Program{static void Main(){using (Document sourceDoc = new Document()){sourceDoc.LoadFromFile("Source.docx");using (Document destDoc = new Document()){destDoc.LoadFromFile("Target.docx");Section sourceSection = sourceDoc.Sections[0];Section destSection = destDoc.Sections[0];HeaderFooter header = sourceSection.HeadersFooters.Header;HeaderFooter footer = sourceSection.HeadersFooters.Footer;for (int i = 0; i < header.ChildObjects.Count; i++)destSection.HeadersFooters.Header.ChildObjects.Add(header.ChildObjects[i].Clone());for (int i = 0; i < footer.ChildObjects.Count; i++)destSection.HeadersFooters.Footer.ChildObjects.Add(footer.ChildObjects[i].Clone());destDoc.SaveToFile("CopyHeadersAndFooters_Result.docx", FileFormat.Docx2016);}}}}
}

代码解析

  • 遍历 HeaderFooter.ChildObjects 克隆每个子对象,保持页眉页脚内容和格式。
  • 适合在模板创建或多文档生成时保持风格一致。

总结

通过 C# 编程方式复制 Word 文档内容,可以灵活地实现文档的备份、合并、拆分。
无论是复制整个文档、节、段落、表格,还是页眉页脚,自动化方法都能减少人工操作带来的错误,提高效率。本文提供的方法可以帮助开发人员轻松应对文档生成、内容整合和模板管理等多种场景,为企业级文档处理提供高效可靠的解决方案。

http://www.dtcms.com/a/357206.html

相关文章:

  • 对接连连支付(八)-- 支付订单关闭
  • 52-容器总结与应用
  • LeetCode259~282题解
  • 使用STM32CubeMX使用CAN驱动无刷电机DJI3508
  • 多智能体框架(下)
  • 【系列03】端侧AI:构建与部署高效的本地化AI模型 第2章:端侧AI硬件入门
  • c++ 右值引用
  • 从零开始的python学习——常量与变量
  • 【STM32外设】ADC
  • OSS Nginx 反代提示 SignatureDoesNotMatch
  • 网络_协议
  • (十)ps识别:Swin Transformer-T 与 ResNet50 结合的 PS 痕迹识别模型训练过程解析
  • 链表有环找入口节点原理
  • Vue3 + TS + MapboxGL.js 三维地图开发项目
  • Marin说PCB之POC电路layout设计仿真案例---11
  • Jenkins Pipeline(二)-设置Docker Agent
  • 渲染速度由什么决定?四大关键因素深度解析
  • 【拍摄学习记录】07-影调、直方图量化、向右向左
  • Docker部署openai-edge-tts和即梦API以及应用案例
  • 透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • 12、做中学 | 初一上期 Golang函数 包 异常
  • electron-vite 配合python
  • AI驱动万物智联:IOTE 2025深圳展呈现无线通信×智能传感×AI主控技术融合
  • 软件系统的部署方式:单机、主备(冷主备、热主备)、集群
  • LeetCode100-54螺旋矩阵
  • Verilog 硬件描述语言自学——重温数电之组合逻辑电路
  • 高性能 JSON:System.Text.Json Source Generator vs 手写 Span(Utf8JsonReader/Writer)
  • 并发编程——06 JUC并发同步工具类的应用实战
  • 如何高效批量完成修改文件名的工作?
  • NullPointerException 空指针异常,为什么老是遇到?