C# 合并及拆分Word文档
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文档相关推荐
- 合并多个Word文档
在Word 2007中可以合并多个Word文档. 转载于:https://blog.51cto.com/jackiechen/176693
- 浅析C#合并多个WORD文档的具体实现方法
http://www.chinacs.net/a/csharp/2010/0724/36.html 今天因为客户需要,需要将多个WORD文档合并成为一个WORD文档.其中,对WORD文档的合并方式分两 ...
- java pdf合并_Java 合并、拆分PDF文档
本文将介绍如何在Java程序中合并及拆分PDF文档,合并文档时,包括合并多个不同PDF文档为一个文档,以及合并PDF文档的不同页面为一页:拆分文档是,包括将PDF文档按每一页拆分,以及按指定页数范围来 ...
- java读取word文档内容_合并多个Word文档内容,还在复制粘贴就out了,同事五秒轻松搞定...
在我们工作中,我们经常会编写多个Word文档内容,那么怎么将多个单个的Word文档合并到一个文档中,这就会显得有些难度. 如上图所示,我们需要将三个不同的案例,快速的汇总到我们的案例汇总表当中.许多朋 ...
- C# 操作通过word模板合并N个word文档
C# 操作通过word模板合并N个word文档 C# 操作通过word模板合并N个word文档.在工作中遇到了这样一个工作场景,客户需要经常对上级上报或者汇报本阶段的工作, 比如:日报.周报.月总结. ...
- 使用Java合并多个word文档
此案例需要用到jacob 下载地址 https://download.csdn.net/download/panhaigang123/10599733 将解压好的jacob放入如下图中 impor ...
- mac word维吾尔文字体_如何合并多个word文档?
昨天分享了一个一篇关于word小技能的:5个好用的Word技巧,却很少人知道? 今天分享一个主题:合并多个word文档 这个对于大学生做学习委员就很有帮助了,经常要收集同学们的资料,但是每一个同学1份 ...
- word2010如何合并两个word文档
把两个word文档合并成一个word文档,具体步骤如下: 1.在要插入另一个文档的位置,选择"插入"选项卡中的"对象",然后在弹出的下拉框中选择第二个" ...
- 合并多个word的代码_快速合并多个word文档内容,别再复制粘贴了!
问题情境: 相信很多童鞋在处理多个word文档内容合并时,我想一般情况下你们都会打开各个文档,复制里面的内容,再粘贴到同一个文档里面. 技巧步骤: 1. 首先新建一个文档,单击"插入&quo ...
最新文章
- 让人脸识别算法失灵,还能抵抗微信微博照片压缩!武大Adobe提出抗压缩对抗新框架,成功率最高超90%...
- 通过 PhxPaxos 了解 Paxos 原理
- 系统描述符类型,段描述符类型和段描述符表
- Linux 命令(27)—— echo 命令
- 当启动vue项目安装依赖时报错
- NoSQL精粹pdf
- ubuntu中mysql安装失败
- 119 Python程序中的线程操作-线程同步
- ubuntu服务器系统日志在哪里,如何在Ubuntu上查看和写入系统日志文件
- 计算机硬件工程师需要学哪些,硬件工程师需要学习哪些知识 上EDA365电子论坛...
- JavaScript模板引擎
- 六成应用不需要程序员,一大批程序员会失业?
- 使用dnsmasq作为dns服务器
- 第3天-Jenkins详解
- 几个比较新的恶意程序……AntiVir全报,kaspersky保持沉默的时候多
- python支持复数类型、以下说法错误的是_Python支持复数类型,以下哪个说法是错误的?...
- #SORA#flask实验
- 前端 报错! 总结:
- adb命令——adb shell top命令
- 批量修改图片尺寸的方法
热门文章
- Linux入职基础-4.1_简介微型计算机的组成结构
- 初中计算机基础知识说课稿,初中信息技术说课稿
- 算法训练-审美课-巧用数组下标!!按位取反
- 独孤思维:简单轻松日赚100+,项目不赚钱就是耍流氓
- 一些常用办公开发工具及网站推荐
- 接上次写的筛选【小程序产品筛选,根据不同的分类筛选,价格区间,区域等筛选产品】,优化
- 七彩智能组卷软件系统 V4.9.0.0官方版
- AtCoder Beginner Contest 246 A~E 题解 Bishop 2
- Python实现车牌摇号小程序!5个8不想要就要吗!
- 比较器之几种电压比较器电路