C# 合并及拆分Word文档

本文简要分析一下如何如何使用C#简单实现合并和拆分word文档。平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分。在Word中,合并或拆分文档最简单的方式就是打开一个原文档的副本文件,复制我们需要的部分,删除不需要的部分,然后再保存文档。使用这种方法在文档比较多或者比较大时手动操作起来比较费时,以下是使用C#来合并一个Word文档的某一个section到另一个文档或者合并两个完整的Word文档到一个单独的文档以及如何根据section和page break来拆分一个Word文档的方法。

第一部分:合并Word文档

我新创建了两个简单的word文档,如下图:

文档1

文档2

合并一个Word文档的某一个section到另一个文档

//加载文档1和文档2
Document doc1 = newDocument();
doc1.LoadFromFile("SalesReport.docx", FileFormat.Docx);
Document doc2 = newDocument();
doc2.LoadFromFile("Stories.docx",FileFormat.Docx);
//获取文档2的第一个section
Section sec = doc2.Sections[0];
//克隆该section并把它添加到文档1
doc1.Sections.Add(sec.Clone());
doc1.SaveToFile("Mergesection.docx",FileFormat.Docx);

效果图:

合并两个完整的Word文档到一个单独的文档

//加载文档1
Document document = new Document();
document.LoadFromFile("SalesReport.docx", FileFormat.Docx);
//将文档2的所有内容插入到文档1
document.InsertTextFromFile("Stories.docx",FileFormat.Docx);
//将结果另存为到另一个单独的文档
document.SaveToFile("MergeFiles.docx",FileFormat.Docx);

效果图:


第二部分:拆分Word文档

根据sectionbreak拆分Word文档

//加载源文档
Document document = new Document();
document.LoadFromFile("MergeFiles.docx");
//定义一个新的文档对象
Document newWord;
//遍历源文档的所有section,克隆每个section并将其添加至一个新的word文档,然后保存文档
for (int i = 0; i <document.Sections.Count; i++)
{newWord = new Document();newWord.Sections.Add(document.Sections[i].Clone());newWord.SaveToFile(String.Format(@"test\output_{0}.docx",i));
}

效果图:

根据pagebreak拆分Word文档

如下文档含有两个pagebreak分别在第一页和第二页的末尾:

参考如下代码来根据page break拆分以上文档:

//加载源文档
Document original = new Document();
original.LoadFromFile("NewZealand.docx");
//创建一个新的文档并给它添加一个section
Document newWord = new Document();
Section section = newWord.AddSection();int index = 0;
//遍历源文档的所有section,检测page break并根据page break拆分文档
foreach (Section sec in original.Sections)
{foreach (DocumentObjectobj in sec.Body.ChildObjects){if (obj is Paragraph){Paragraph para = obj asParagraph;section.Body.ChildObjects.Add(para.Clone());foreach (DocumentObjectparobj in para.ChildObjects){if (parobj isBreak && (parobj as Break).BreakType== BreakType.PageBreak){int i =para.ChildObjects.IndexOf(parobj);for (intj = i; j < para.ChildObjects.Count; j++){section.Body.LastParagraph.ChildObjects.RemoveAt(i);}newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);index++;newWord = new Document();section = newWord.AddSection();section.Body.ChildObjects.Add(para.Clone());while (i >= 0){section.Paragraphs[0].ChildObjects.RemoveAt(i);i--;}if(section.Paragraphs[0].ChildObjects.Count == 0){section.Body.ChildObjects.RemoveAt(0);}}}}if (obj is Table){section.Body.ChildObjects.Add(obj.Clone());}}
}
newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);

效果图:

完整代码:

合并

using Spire.Doc;namespace Merge_Word_Document
{class Program{static void Main(string[] args){//合并一个Word文档的某一个section到另一个文档/*Document doc1 = new Document();doc1.LoadFromFile("SalesReport.docx", FileFormat.Docx);Document doc2 = new Document();doc2.LoadFromFile("Stories.docx", FileFormat.Docx);Section sec = doc2.Sections[0];doc1.Sections.Add(sec.Clone());doc1.SaveToFile("Mergesection.docx", FileFormat.Docx);*///合并两个完整的Word文档到一个单独的文档Document document = newDocument();document.LoadFromFile("SalesReport.docx", FileFormat.Docx);document.InsertTextFromFile("Stories.docx",FileFormat.Docx);document.SaveToFile("MergeFiles.docx",FileFormat.Docx);}}
}

拆分

using System;
using Spire.Doc;
using Spire.Doc.Documents;namespace Split_Word_Document
{class Program{static void Main(string[] args){//根据section拆分/*Document document = new Document();document.LoadFromFile("Stories.doc");Document newWord;for (int i = 0; i <document.Sections.Count; i++){newWord = new Document();newWord.Sections.Add(document.Sections[i].Clone());newWord.SaveToFile(String.Format(@"test\out_{0}.docx", i));}*///根据page break拆分Document original = newDocument();original.LoadFromFile("New Zealand.docx");Document newWord = newDocument();Section section = newWord.AddSection();int index = 0;foreach (Sectionsec in original.Sections){foreach (DocumentObjectobj in sec.Body.ChildObjects){if (obj isParagraph){Paragraph para = obj as Paragraph;section.Body.ChildObjects.Add(para.Clone());foreach (DocumentObject parobj in para.ChildObjects){if (parobj is Break && (parobj asBreak).BreakType == BreakType.PageBreak){inti = para.ChildObjects.IndexOf(parobj);for (int j = i; j< para.ChildObjects.Count; j++){section.Body.LastParagraph.ChildObjects.RemoveAt(i);}newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);index++;newWord = new Document();section =newWord.AddSection();section.Body.ChildObjects.Add(para.Clone());while (i >= 0){section.Paragraphs[0].ChildObjects.RemoveAt(i);i--;}if (section.Paragraphs[0].ChildObjects.Count == 0){section.Body.ChildObjects.RemoveAt(0);}}}}if (obj isTable){section.Body.ChildObjects.Add(obj.Clone());}}}newWord.SaveToFile(String.Format("result/out-{0}.docx", index), FileFormat.Docx);}}
}

注意:这里我使用了一个免费的word API(http://freeword.codeplex.com)。

C# 合并及拆分Word文档相关推荐

  1. 合并多个Word文档

    在Word 2007中可以合并多个Word文档. 转载于:https://blog.51cto.com/jackiechen/176693

  2. 浅析C#合并多个WORD文档的具体实现方法

    http://www.chinacs.net/a/csharp/2010/0724/36.html 今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档.其中,对WORD文档的合并方式分两 ...

  3. java pdf合并_Java 合并、拆分PDF文档

    本文将介绍如何在Java程序中合并及拆分PDF文档,合并文档时,包括合并多个不同PDF文档为一个文档,以及合并PDF文档的不同页面为一页:拆分文档是,包括将PDF文档按每一页拆分,以及按指定页数范围来 ...

  4. java读取word文档内容_合并多个Word文档内容,还在复制粘贴就out了,同事五秒轻松搞定...

    在我们工作中,我们经常会编写多个Word文档内容,那么怎么将多个单个的Word文档合并到一个文档中,这就会显得有些难度. 如上图所示,我们需要将三个不同的案例,快速的汇总到我们的案例汇总表当中.许多朋 ...

  5. C# 操作通过word模板合并N个word文档

    C# 操作通过word模板合并N个word文档 C# 操作通过word模板合并N个word文档.在工作中遇到了这样一个工作场景,客户需要经常对上级上报或者汇报本阶段的工作, 比如:日报.周报.月总结. ...

  6. 使用Java合并多个word文档

    此案例需要用到jacob   下载地址 https://download.csdn.net/download/panhaigang123/10599733 将解压好的jacob放入如下图中 impor ...

  7. mac word维吾尔文字体_如何合并多个word文档?

    昨天分享了一个一篇关于word小技能的:5个好用的Word技巧,却很少人知道? 今天分享一个主题:合并多个word文档 这个对于大学生做学习委员就很有帮助了,经常要收集同学们的资料,但是每一个同学1份 ...

  8. word2010如何合并两个word文档

    把两个word文档合并成一个word文档,具体步骤如下: 1.在要插入另一个文档的位置,选择"插入"选项卡中的"对象",然后在弹出的下拉框中选择第二个" ...

  9. 合并多个word的代码_快速合并多个word文档内容,别再复制粘贴了!

    问题情境: 相信很多童鞋在处理多个word文档内容合并时,我想一般情况下你们都会打开各个文档,复制里面的内容,再粘贴到同一个文档里面. 技巧步骤: 1. 首先新建一个文档,单击"插入&quo ...

最新文章

  1. 让人脸识别算法失灵,还能抵抗微信微博照片压缩!武大Adobe提出抗压缩对抗新框架,成功率最高超90%...
  2. 通过 PhxPaxos 了解 Paxos 原理
  3. 系统描述符类型,段描述符类型和段描述符表
  4. Linux 命令(27)—— echo 命令
  5. 当启动vue项目安装依赖时报错
  6. NoSQL精粹pdf
  7. ubuntu中mysql安装失败
  8. 119 Python程序中的线程操作-线程同步
  9. ubuntu服务器系统日志在哪里,如何在Ubuntu上查看和写入系统日志文件
  10. 计算机硬件工程师需要学哪些,硬件工程师需要学习哪些知识 上EDA365电子论坛...
  11. JavaScript模板引擎
  12. 六成应用不需要程序员,一大批程序员会失业?
  13. 使用dnsmasq作为dns服务器
  14. 第3天-Jenkins详解
  15. 几个比较新的恶意程序……AntiVir全报,kaspersky保持沉默的时候多
  16. python支持复数类型、以下说法错误的是_Python支持复数类型,以下哪个说法是错误的?...
  17. #SORA#flask实验
  18. 前端 报错! 总结:
  19. adb命令——adb shell top命令
  20. 批量修改图片尺寸的方法

热门文章

  1. Linux入职基础-4.1_简介微型计算机的组成结构
  2. 初中计算机基础知识说课稿,初中信息技术说课稿
  3. 算法训练-审美课-巧用数组下标!!按位取反
  4. 独孤思维:简单轻松日赚100+,项目不赚钱就是耍流氓
  5. 一些常用办公开发工具及网站推荐
  6. 接上次写的筛选【小程序产品筛选,根据不同的分类筛选,价格区间,区域等筛选产品】,优化
  7. 七彩智能组卷软件系统 V4.9.0.0官方版
  8. AtCoder Beginner Contest 246 A~E 题解 Bishop 2
  9. Python实现车牌摇号小程序!5个8不想要就要吗!
  10. 比较器之几种电压比较器电路