C# 使用Microsoft.Office.Interop.Word 如何合并多个WORD或者Document对象?(不是多个WORD文件)

C# 使用Microsoft.Office.Interop.Word 如何合并多个WORD或者Document对象?(不是多个WORD文件)

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/159535
  • 你也可以参考下这篇文章:使用C#自带的Microsoft.Office.Interop.Word类对word文档进行操作
  • 除此之外, 这篇博客: 通过C#Microsoft.Office.Interop.Word理解互操作性中的 三、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”