2012-10-18 37 views
8

我最近公布的关于阅读Word文件here的问题。歧义在Word中互操作代码

该应用程序运行然而罚款我得到这样的警告消息;方法 'Microsoft.Office.Interop.Word._Document.Close(参考对象,引用对象,参考对象)' 和非法“Microsoft.Office.Interop.Word.DocumentEvents2_Event之间

警告歧义。关'。使用 方法组。

似乎有些使用命名空间的歧义,我想知道如何解决这个问题。虽然该应用程序运行,但我想尽量减少警告/错误。

我提供以下的代码的类;该生产线是指在这两行

docs.Close(ref nullobject, ref nullobject, ref nullobject); 
wordObject.Quit(ref nullobject, ref nullobject, ref nullobject); 

整个代码:

namespace Wizard.Classes 
{ 
    class MSWordReader 
    { 
     public void read(String filename) 
     { 
      String buffer = ""; 
      try 
      { 
       Microsoft.Office.Interop.Word.Application wordObject = new 
       Microsoft.Office.Interop.Word.Application(); 
       object file = filename; //this is the path 
       object nullobject = Type.Missing; 
       object visible = false; 
       object readonlyp = true; 
       object addtorecent = false; //add to words recent filelist 

       Microsoft.Office.Interop.Word.Document docs = wordObject.Documents.Open 
        (ref file,ref nullobject, ref readonlyp, ref addtorecent, 
        ref nullobject, ref nullobject, ref nullobject, ref nullobject, 
        ref nullobject, ref nullobject, ref nullobject, ref visible, 
        ref nullobject, ref nullobject, ref nullobject, ref nullobject 
            ); 
       docs.ActiveWindow.Selection.WholeStory(); 
       docs.ActiveWindow.Selection.Copy(); 
       IDataObject data = Clipboard.GetDataObject(); 
       buffer = data.GetData(DataFormats.Text).ToString(); 

       docs.Close(ref nullobject, ref nullobject, ref nullobject); 

       wordObject.Quit(ref nullobject, ref nullobject, ref nullobject); 
       MessageBox.Show(buffer); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 
} 

回答

19

要解决的模糊性,使用:

((Microsoft.Office.Interop.Word._Document)docs).Close(ref nullobject, ref nullobject, ref nullobject);  
((Microsoft.Office.Interop.Word._Application)wordObject).Quit(ref nullobject, ref nullobject, ref nullobject); 
+0

谢谢@Avi Shmidman – IEnumerable

6

试试您铸造docs第一:

((_Document)docs).Close(ref nullobject, ref nullobject, ref nullobject); 

Microsoft.Office.Interop.Word.Document接口同时实现DocumentEvents2_Event_Document接口。每种方法都有一个很接近的方法,编译器无法确定你的意思。

或者,你可以声明你的docs变量作为首位_Document

Microsoft.Office.Interop.Word._Document docs = wordObject.Documents.Open ... 

同样的分辨率,可用于歧义您wordObject,它转换成一_Application

+0

感谢@goric; :) – IEnumerable

1

提出的解决方案能正常工作,但它留下ReSharper的有,你不能获得使用旧的“忽略错误”摆脱除了暧昧调用错误在R#错误对话框中窍门,尽管编译器对它很满意。

我真的无法得到来自R#一个很好的解决方案,它只是在少数地方出现这样最不坏的答案,我发现作品,且不会产生任何的Visual Studio或R#错误是投到一个动态的。

((dynamic) Doc).Close(); 

不理想,但我只是抓住我的鼻子,并使用它。如果你打算多次使用它,你显然可以保存到一个动态变量中。你可以在技术上使用动态的一切(这只是后期绑定COM),但你会失去所有的智能感知,所以我只用它的一些方法和事件从何而来了。