Word文档合并
Word文档合并的一种实现
今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多。这个问题,如果是在服务端的话,直接使用OpenXML技术,读写文档就可以实现,这样性能较稳定,但是需要对OpenXML有一定的了解。如果在客户端机器上,可以使用Word PIA实现。
由于本人对于Word PIA较熟悉,所以采用了该方法。但是在实现的过程中,也是有很多种思路的。
- 将b.doc打开,将其中的内容选中,复制到剪贴板,然后打开目标文件a.doc,通过代码将光标移到文档末尾,粘贴。粘贴一次保存一下文件,然后在打开c.doc重复以上过程,知道所有文件均添加完成。
- 将b.doc打开,将其中的内容选中,获取Range对象,然后打开目标文件a.doc,在里面通过代码插入b的内容。
以上两种方法都涉及到打开和读取待合并的文档。完成之后还需要及时关掉已释放资源。对于一些复杂的对象,比如说具有行或者列合并的表格对象,采用第二种方式在目标文档中创建表格,然后循环遍历待合并文档中的表格,并给目标文档中的表格进行赋值会出现问题。效果都不太好。
在查找了一些资料后,发现Word自带有添加文档内容到打开文档中的功能。

这样就简单多了,通常最简单的做法是录制宏。

操作步骤如下:
- 点击录制宏
- 打开目标文件a.doc
- 然后按住键盘 Ctrl+End 键,跳转到文档a的末尾。
- 点击 Insert(插入)->Object(对象)->Text from file(文件中的文字)
- 选中待插入的文件b.doc,确定
- 停止录制宏
点击宏编辑,然后可以看到我们刚才操作的步骤与之对应的代码。然后我们将它转为.NET中调用的方式即可。在Office开发中,这是一种很有用的技巧。
Sub Macro1()
Selection.EndKey Unit:=wdStory
ChangeFileOpenDirectory "D:\"
Selection.InsertFile FileName:="b.docx", Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
End Sub
这里的关键方法有两个,一个是Selection.EndKey,用来跳转到文档的最后,一个是InsertFile,从文档中导入文本。将上面的VBA代码转为.NET中C#代码如下:
private void btnCombine_Click(object sender, EventArgs e)
{
//创建WordApp对象
Word.Application wordApp = null;
try
{
wordApp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
}
catch (System.Runtime.InteropServices.COMException ex)
{
wordApp = new Word.Application();
}
//源文件,待合并的文件
object missing = Type.Missing;
object targetfilename = @"D:\a.docx";
Word.Document docTarget = wordApp.Documents.Open(ref targetfilename, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); //所有的要往源文件中合并的文件,注意顺序
//在实际操作中把这部分替换为 遍历文件夹下的所有想合并的word文档的名称即可
for (int count = 0; count <= 3; count++)
{
string sourcefilename = @"D:\b.docx";
//移动光标到文档末尾
docTarget.Application.Selection.EndKey(WdUnits.wdStory);
//在文档末尾插入待合并内容
docTarget.Application.Selection.InsertFile(sourcefilename, ref missing, false, false, false);
//保存
docTarget.Save();
} docTarget.Save(); Marshal.ReleaseComObject(wordApp);
MessageBox.Show("Success");
}
代码中需要注意的是,创建Word.Application对象的方式,以及资源释放的方式。
Word文档合并的更多相关文章
- C# 实现将多个word文档合并成一个word文档的功能
前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Micros ...
- 多个 Word 文档合并为一个
如果您工作中经常要跟 Word 文档打交道,时不时的您可能需要将多个 Word 文档合并为一个.信息量少的时候,我们可以直接使用复制粘贴.除此之外,还有没有其它办法呢? 借助word2010/2007 ...
- Word文档合并的一种实现
今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多.这个问题,如果是在服务端的话,直接 ...
- word文档批量合并工具
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; En ...
- Java 合并Word文档
合并文档可以是将两个包含一定逻辑关系的文档合并成一个完整的文档,也可以是出于方便文档存储.管理的目的合并多个文档为一个文档.下面,就将以上文档操作需求,通过Java程序来实现Word文档合并.合并文档 ...
- POI生成word文档完整案例及讲解
一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...
- C# 合并及拆分Word文档
本文简要分析一下如何如何使用C#简单实现合并和拆分word文档.平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分 ...
- JAVA合并多个word文档根据文章标题生成目录
此产品版本是免费版的,我也是在用免费,除了只能单次识别25张一下的word和生成pdf有限制,其他的功能都和正式版差不多. 如果你几十个文档,每个文档几页,输出出来超过25页,那没关系,依然可以使用. ...
- 合并两个word文档,保持样式不变
一.需求说明 例如将封面插入到word正文上方 二.导入依赖 <dependency> <groupId>org.apache.poi</groupId> < ...
随机推荐
- Android FM学习中的模块 FM启动过程
最近的研究FM模,FM是一家值我正在学习模块.什么可以从上层中可以看出. 上层是FM按钮的操作和界面显示,因此调用到FM来实现广播收听的功能. 看看Fm启动流程:例如以下图: 先进入FMRadio.j ...
- C++11实现模板手柄:委托构造函数、defaultkeyword分析
C++11.使用委托构造函数.和高速变量初始化,defaultkeyword重新声明默认构造函数,回答pod状态. 分析与推荐的方法. 到目前为止,VS2012和2013异常声明兼容还是停留在通信代码 ...
- 如何使用 RMAN 异构恢复一些表空间
在oracle 在日常维护的数据库中难免会遇到误删数据和使用(drop.delete. truncate)当我们使用常规手段(flashback query .flashback drop)当数据不能 ...
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用具体解释
一.概要:前一篇初步的描写叙述了size class的概念,那么实际中怎样使用呢,以下两个问题是我们一定会遇到的: 1.Xcode6中添加了size class,在storyboard中怎样使用? 2 ...
- hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场
Parenthese sequence Time Limit: ...
- java界面编程(8) ------ 组合框(下拉列表)
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 与一组单选button的功能类似,组合框(下拉列表)也是强制用户从一组可能的元素 ...
- cscope的使用
转自:http://easwy.com/blog/archives/advanced-vim-skills-cscope/ 本节所用命令的帮助入口: :help cscope 在前面的文章中介绍了利用 ...
- hdu1848 Fibonacci again and again(SG游戏功能)
现在的变化是看不清楚SG功能什么寻求方法 临时模板标题是首当 性能mex1它正在寻求g(x) 然后XOR #include<cstdio> #include<iostream> ...
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
原文:ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象, ...
- 去除a标签链接触摸时产生边框
排除误解 网络资料说这个属性只用于iOS(iPhone和iPad),其实是错误的,android手机大部分也是支持的,只是显示效果不一样,移动开发并不成熟,更多的还需要大家去实践来辨别真伪- - -w ...