2010-02-03 22 views
7

में एम्बेडेड होने पर एक्सेल get_Range अनुपलब्ध है I COM COMOP DLL का संदर्भ देने वाली असेंबली का निर्माण करता हूं। यदि मैं संदर्भ इंटरफ़ेस प्रकार (VS2010) में सही इंटरफ़ेस प्रकार सेट करके COM इंटरऑप प्रकारों को एम्बेड करता हूं, तो रन-टाइम पर एक त्रुटि होती है "ऑब्जेक्ट में get_Range के लिए परिभाषा नहीं होती है"। यदि COM इंटरऑप प्रकार एम्बेडेड नहीं हैं तो कोई त्रुटि नहीं होती है।इंटरफ़ेस असेंबली .NET 4.0

किसी को भी पता है क्यों एक विशेष विधि, Worksheet.get_Range लोप किया जाना चाहिए या कि यह कैसे हल करने के लिए या किसी अन्य प्रासंगिक अंतर्दृष्टि है? मुझे किसी भी मदद के लिए आभारी होना चाहिए।

इंटरॉप dll (वस्तु, [वस्तु]) Worksheet.get_Range करने के लिए एक संदर्भ है। मेरी कॉलिंग असेंबली पर परावर्तक का उपयोग करके वर्कशीट के तहत get_Range का कोई उल्लेख नहीं है।

इंटरॉप विधानसभा मैं embedding हूँ Excel9.olb से उत्पन्न होता है। मैं पीआईए का उपयोग नहीं कर रहा हूं क्योंकि एप्लिकेशन एकाधिक एक्सेल संस्करणों को लक्षित करता है।

उत्तर

10

मैं इस बाहर अपने आप को अभी तक प्रयास नहीं किया है, लेकिन मुझे विश्वास है कि वाक्य रचना जब एक और अधिक "सी # दोस्ताना 'वाक्य रचना करने के लिए एम्बेडेड सी # 4.0 के तहत COM Interop प्रकार का उपयोग बदल गया है।

इसलिए, बजाय get_Range(object, [object]) विधि की तलाश की, आप वैकल्पिक पैरामीटर को छोड़ सकते हैं या तो (बजाय Type.Missing प्रदान करने के लिए होने के), या आप बुला से बच सकते हैं पूरी तरह से एक्सेसर मिलता है, और बजाय संपत्ति नाम का संदर्भ वर्ग कोष्ठकों के उपयोग:

// Using C# 3.0: 
Excel.Range range = worksheet.get_Range("A1", Type.Missing); 

// Using C# 4.0, omitting the optional parameter: 
Excel.Range range = worksheet.get_Range("A1"); 

// Using C# 4.0, utilizing square-bracket indexing: 
Excel.Range range = worksheet.Range["A1"]; 

से मैं क्या समझ है, हालांकि, आप अभी भी इसे "पुराना तरीका", जहां नई इंडेक्सर वाक्य रचना की वास्तव में आवश्यकता और 'सेट' पर्दे के पीछे एक्सेसर 'प्राप्त' बुला रहा है कॉल करने के लिए सक्षम होना चाहिए, तो मुझे सच में नहीं पता कि आपको परेशानी क्यों है। मेरा अनुमान है कि आपको IntelliSense सूची में Worksheet.get_Range के बजाय Worksheet.Range के अंतर्गत देखने की आवश्यकता है। यदि यह आपके लिए काम नहीं करता है, तो ऐसा लगता है कि आपके सेटअप या स्थापना में कुछ गलत हो सकता है।

इस बारे में अधिक के लिए देखें: Indexed Properties in C# 4.0 किरिल Osenkov द्वारा।

आशा इस मदद करता है ...

माइक

+0

MIke, आपकी मदद के लिए धन्यवाद। एकल पैरामीटर दृष्टिकोण को रन-टाइम त्रुटि नहीं मिलती है और जाहिर है कि यह एक अच्छा कामकाज है। मैंने माइक्रोसॉफ्ट 53076 9 पर एक बग रिपोर्ट सबमिट की है। – mikemay

+1

https://connect.microsoft.com/VisualStudio/feedback/details/530769/get-range-method-missing-with-embedded-interop-assembly?wa=wsignin1.0 – mikemay

+0

आह, ठीक है, मैंने अपनी पिछली टिप्पणी में एक बुरा लिंक पोस्ट किया है, इसे ठीक करने के लिए धन्यवाद। चर्चा बहुत दिलचस्प है, और समझ में आता है। लेकिन, मैं पूछ सकता, नहीं सबसे आसान समाधान अब बस 'worksheet.Range [" A1 "]' बड़े 'worksheet.get_Range के बजाय वाक्य रचना (" A1 ", Type.Missing) का उपयोग करने के' अब है कि आप कर रहे हैं सी # 4.0 का उपयोग कर? आपको एक बहुत ही रोचक जिज्ञासा मिली है, लेकिन इसे अपने कोड के लिए ठीक करने के लिए, यह केवल नए सिंटैक्स का उपयोग करने के लिए सबसे आसान और सबसे अच्छा प्रतीत होता है - जो कि किसी भी मामले में (डिजाइन द्वारा!) पढ़ने में आसान है। –

1

यह बीटा चरण https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=530769&wa=wsignin1.0 पर माइक्रोसॉफ्ट के साथ एक बग के रूप में उठाया गया था और आरटीएम के बाद से डिजाइन के रूप में हल किया गया था। माइक रोसेनब्लम का जवाब वहां अनुमोदित है।

इस रूप में Excel.Range r = sh.Range [sh.Cells [1, 1], sh.Cells [2, 2]] संक्षेप किया जा सकता है; जहां sh वर्कशीट है।