西湖黄四郎 2022-10-13 14:43 采纳率: 0%
浏览 51

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

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

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-13 15:37
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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”

    评论

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据