Microsoft Word Interop:COMException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Microsoft Word Interop:COMException相关的知识,希望对你有一定的参考价值。

我正在用c#编写一个程序,它截取屏幕截图并将它们粘贴到Microsoft Word模板(.dot)文件中的预定义书签上。

该代码在Microsoft Word 2007上正常工作,但在Microsoft Word 2016上随机失败。

我是通过以下代码行完成的:

// wdoc is a word document object
// bookMarkName is pre-defined in the code
wdoc.Bookmarks.get_Item(ref bookMarkName).Range.Paste();

该代码在Word 2007上完美运行,但是当我在Word 2016上运行它时,它会运行一段时间,然后在上面的行中失败,显示以下错误:

System.Runtime.InteropServices.COMException (0x800A1066): Command failed at
Microsoft.Office.Interop.Word.Range.Paste()

如何使它适用于Word 2016?

答案

在网上搜索了几个小时后,我找到了上述问题的解决方案,并且非常简单。

显而易见的问题是,Word 2016并未完全支持用于开发的Word 2007的Interop库。

因此,如果您正在制作使用Interop与Microsoft Office应用程序交互的程序,请使用针对不同版本的不同Interop库构建程序。如果程序自动使用目标系统上安装的Interop库会更好,因为这会使它独立于系统上安装的Microsoft Office版本,但是,就我在其上搜索而言,目前还不可能。

如果您想知道如何为不同版本的Microsoft Office下载Interop库,我的建议是不要这样做,而是为每个版本的MS Office单独构建程序(通过在系统上构建它)哪个版本的MS Office已安装),并为不同版本的Office单独分发您的程序。这样,用户可以根据他/她的系统上安装的MS Office版本选择下载适当版本的程序

以上是关于Microsoft Word Interop:COMException的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .net 中添加对“Microsoft.Office.Interop.Word”的引用

基于Microsoft.Office.Interop.Word的导出

基于Microsoft.Office.Interop.Word的替换文字

无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型

C# Microsoft.Office.Interop.Word怎么获取页数和字数?

如何在VS 2010中添加microsoft.office.interop.word(2003版)