2012-10-18 11 views
8

में अस्पष्टता मैंने हाल ही में वर्ड फाइल here पढ़ने के बारे में एक प्रश्न पोस्ट किया है।वर्ड इंटरऑप कोड

ऐप ठीक चलाता है हालांकि मुझे यह चेतावनी संदेश मिलता है;

विधि '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

धन्यवाद @ एवी श्मिटमैन – IEnumerable

6

कास्टिंग की कोशिश करो अपने docs पहले:

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

Microsoft.Office.Interop.Word.Document इंटरफ़ेस लागू करता है दोनों DocumentEvents2_Event और _Document इंटरफेस । प्रत्येक के पास एक करीबी विधि होती है, और संकलक को यह निर्धारित करने में परेशानी हो रही है कि आपका क्या मतलब है।

वैकल्पिक रूप से, आप पहली जगह में एक _Document के रूप में अपने docs चर घोषित कर सकता है:

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

एक ही संकल्प, आपकी wordObject पर अस्पष्टता के लिए इस्तेमाल किया जा सकता एक _Application करने के लिए इसे कास्टिंग।

+0

धन्यवाद @goric; :) – IEnumerable

1

प्रस्तावित समाधान ठीक काम करता है, लेकिन यह एक अस्पष्ट प्रार्थना किए त्रुटि है कि आप पुराने का उपयोग कर "त्रुटियाँ ध्यान न दें" के अलावा छुटकारा नहीं मिल सकता है के साथ छोड़ देता है ReSharper R # त्रुटियों के संवाद में चाल, भले ही संकलक इसके साथ पर्याप्त खुश हों।

मुझे वास्तव में आर # से अच्छा समाधान नहीं मिल सका और यह केवल कुछ स्थानों पर आता है, इसलिए कम से कम बुरे जवाब में मैंने पाया कि काम करता है और विजुअल स्टूडियो या आर # त्रुटियों का उत्पादन नहीं करता है गतिशील करने के लिए।

((dynamic) Doc).Close(); 

आदर्श नहीं है, लेकिन मैं सिर्फ अपनी नाक पकड़ और इसका इस्तेमाल करते हैं। यदि आप इसे एक से अधिक बार उपयोग करने जा रहे हैं तो आप स्पष्ट रूप से गतिशील चर में सहेज सकते हैं। आप तकनीकी रूप से सब कुछ के लिए गतिशील का उपयोग कर सकते हैं (यह केवल देर से बाध्य COM है), लेकिन आप सभी intelliSense खो देंगे, इसलिए मैं इसे केवल कुछ तरीकों और घटनाओं पर उपयोग करता हूं जहां यह आता है।

संबंधित मुद्दे