C# 使用Microsoft.Office.Interop.Word 如何合并多个WORD或者Document对象?(不是多个WORD文件)
1条回答 默认 最新
关注
- 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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”
解决评论 打赏 举报无用 1
悬赏问题
- ¥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来回复数据