C# 使用Microsoft.Office.Interop.Word 如何合并多个WORD或者Document对象?(不是多个WORD文件)
1.添加接口程序集并新建对象
新建控制台程序,点击添加引用——COM——类型库——Microsoft Word XX.0 Object Library(其互操作性“Embed Interop Types”属性默认为True,会自动添加另外的依赖COM组件Microsoft Office Core),之后添加新建一个WordApp对象
using WordApp = Microsoft.Office.Interop.Word;
namespace COM_Assemblies_Demo
{
class Program
{
static void Main(string[] args)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
//Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.ApplicationClass();//需要将Microsoft.Office.Interop.Word的“嵌入互操作类型”属性改为False
}
}
}
注(坑一):
①此处需要注意的是,若点击添加引用后添加的是程序集——扩展中的Microsoft.Office.Interop.Word,仍需手动添加对应版本的“office”程序集(其互操作性“Embed Interop Types”属性默认为False,与直接添加COM不同)
②若要使得使用程序的客户机生成word报告功能不受word版本(Word2007对应12.0,2010对应14.0,Word2013对应15.0)影响,需要将添加引用后(不管是通过COM还是程序集添加,word的互操作接口名称都一样)的Microsoft.Office.Interop.Word的互操作性“Embed Interop Types”属性设置为True
③参考:Word嵌入互操作类型
2.对word文件进行操作并退出
static void Main(string[] args)
{
//打开app
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
//Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.ApplicationClass();//需要将Microsoft.Office.Interop.Word的“嵌入互操作类型”属性改为False
object path = "D://test.doc";
if (File.Exists(path.ToString()))
{
File.Delete(path.ToString());
}
object nothing = System.Reflection.Missing.Value;
//新建空白页
Microsoft.Office.Interop.Word.Document doc = app.Documents.Add(ref nothing, ref nothing, ref nothing, ref nothing);
//写入内容
doc.Content.InsertAfter("This is debug text!");
//保存文档
doc.SaveAs2(path, ref nothing, ref nothing, ref nothing,
ref nothing, ref nothing, ref nothing, ref nothing,
ref nothing, ref nothing, ref nothing, ref nothing);
//关闭文档
doc.Close();
//关闭Word
app.Quit();
}
注(坑二):
①客户机上Office软件或Word安装时,Word的软件的“.NET编程支持”(会默认安装,不排除认为不进行安装的可能性);可以手动对其进行修改,会发现“全局程序集缓存GAC”目录“C:\Windows\assembly”下Microsoft.Office.Interop.Word对应版本的程序集,在修改“.NET编程支持”为不支持时会被移除,此时的结果就是VS项目中程序集下找不到该扩展,添加的COM亦不能正常工作。
②一些所谓的绿色版office可能也会存在此问题。
注(坑三):
①最近遇到的一个问题:客户机(华为)上最开始安装office365(未激活),后续又卸载并安装了“华为内部软件商店”上的office2013(博主在开发软件时引用的是Word2010的程序集,截止写此文时已了解设置互嵌入互操作为True则可无视客户机Word版本),客户报出说软件之前可以正常生成报告,而安装office2013后就不能生成了。
②首先是查看Word注册表并清理之前卸载遗留(参考:如何在 Word 中重置用户选项和注册表设置),并确认MSWORD.OLB库文件(路径:C:\Program Files\Microsoft Office\OfficeXX\MSWORD.OLB,参考博客:MSWORD.OLB未正确注册),最后如上文的一小段代码中的文本内容可以被编辑进debug.doc文档中,但博主的软件程序仍不能运行
③最后发现,是由于客户安装的内部office,其空白页的默认模板是被修改过的(正常我们新建空白页中页眉页脚都无特殊内容,而其新建空白页是有插入其Logo和其他描述信息的),最简单的方法:进入word选项——从默认模板管理器中点击打开文件,将下图左右红框中引用的文件删除或移动至其他文件夹,使word重新创建默认的真正对应空白页的Normal.dotm文件(最终结果如下图)。
参考的模板路径为:
“C:\Users\用户\AppData\Roaming\Microsoft\Templates”
或
“C:\Users\用户\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Roaming\Microsoft\Templates”