2012-10-18 2 views
8

최근 Word 파일 읽기에 대한 질문이 게시되었습니다 here.Word에서 모호성 Interop 코드

앱이 정상적으로 실행되지만 경고 메시지가 표시됩니다. 방법 'Microsoft.Office.Interop.Word._Document.Close (REF 객체 REF 개체 개체 REF)' 비 방법 '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 첫번째 다음 Microsoft.Office.Interop.Word.Document 인터페이스는 모두 DocumentEvents2_Event_Document 인터페이스를 구현

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

. 각각은 가까운 방법을 가지고 있으며, 컴파일러는 당신이 의미하는 것을 결정하는 데 어려움을 겪고 있습니다.

또는 첫 번째 장소에서 _Documentdocs 변수를 선언 할 수 :

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

같은 해상도는 _Application에 캐스팅, 당신의 wordObject에 모호성 사용할 수 있습니다.

+0

감사합니다. @ 알고리즘; :) – IEnumerable

1

제안 된 솔루션은 잘 작동을하지만, 그것은 당신이 "오류 무시"이전을 사용하는 것을 제외하고 제거 할 수없는 모호한 호출 오류로 ReSharper에서 잎 컴파일러가 충분히 만족 스럽더라도 R # Errors 대화 상자에서 속임수를 사용하십시오.

나는 R #에서 좋은 해결책을 얻지 못했고 몇 군데에만 나왔다. 그래서 내가 발견 한 최소한의 나쁜 대답은 Visual Studio 나 R # 오류를 만들지 않는다. 다이나믹하게

((dynamic) Doc).Close(); 

이상하지만 그냥 코를 잡고 사용하십시오. 두 번 이상 사용할 경우 분명히 동적 변수에 저장할 수 있습니다. 기술적으로 모든 것을 동적으로 사용할 수 있습니다 (단지 늦은 바운드 COM 임). 그러나 모든 intelliSense를 잃어 버리기 때문에 몇 가지 방법과 이벤트에서만 사용할 수 있습니다.