.NET में CVErr मानों से निपटना एक बहुत ही मुश्किल विषय है। समस्या यह है कि .NET (सही ढंग से) CVErr को त्रुटि प्रबंधन के संबंध में अप्रचलित मानता है। CVErr मान, हालांकि, अभी भी एक्सेल कोशिकाओं में उपयोग किए जाते हैं, इसलिए यह Excel स्वचालन के लिए एक बड़ा बड़ा चूक है।
सौभाग्य से, एक कामकाज है। सीवीआरआर मूल्यों की जांच करने का तरीका सेल द्वारा आयोजित डेटा प्रकार की जांच करना है। यदि आयोजित मूल्य को इंटीजर (इंट 32) के रूप में टाइप किया जाता है तो आयोजित मूल्य एक सीवीआरआरआर होता है। (ध्यान दें कि सेल में आयोजित संख्यात्मक मान सामान्य रूप से डबल के रूप में टाइप किए जाते हैं, केवल सीवीएआर मान इंटीजर के रूप में आ सकते हैं।)
सीवीआरआरआर मूल्य के परीक्षण के लिए, सबसे सरल स्तर पर, आपको बस इतना करना है कि आपको बस इतना करना है निम्नलिखित समारोह का उपयोग करें:
bool IsXLCVErr(object obj)
{
return obj is Int32;
}
आप एक विशिष्ट CVErr मूल्य के लिए जाँच करने के लिए की जरूरत है (जैसे, # N/A), तो आप पहले सुनिश्चित करें कि डेटा प्रकार एक पूर्णांक (Int32) है बनाने के लिए जाँच करेगा और फिर इस तालिका के अनुसार सेल द्वारा आयोजित विशिष्ट मान की जांच करें:
- -2146826281 = # DIV/0!
- -2146826246 = # N/A
- -2146826245 = #GETTING_DATA
- -2146826259 = #NAME?
- -2146826288 = #NULL!
- -2146826252 = #NUM!
- -2146826265 = #REF!
- -2146826273 = #VALUE!
उदाहरण के लिए, अपने कोड ऐसा दिखाई दे सकता:
enum CVErrEnum : Int32
{
ErrDiv0 = -2146826281,
ErrGettingData = -2146826245,
ErrNA = -2146826246,
ErrName = -2146826259,
ErrNull = -2146826288,
ErrNum = -2146826252,
ErrRef = -2146826265,
ErrValue = -2146826273
}
bool IsXLCVErr(object obj)
{
return (obj) is Int32;
}
bool IsXLCVErr(object obj, CVErrEnum whichError)
{
return (obj is Int32) && ((Int32)obj == (Int32)whichError);
}
मैं कुछ साल पहले इस पर एक विस्तृत दो भाग लेख लिखा था:
लेख VB.NET के लिए लिखे गए हैं, लेकिन सिद्धांत बिल्कुल सी # के समान हैं। आपको अनुवाद करने में कोई परेशानी नहीं होनी चाहिए, लेकिन अगर आपको कोई समस्या है, तो कृपया पूछें। (कुछ दिन मुझे उम्मीद है कि इस आलेख को सी # के लिए अपडेट करने का समय होगा। यदि यह किसी बिंदु पर होता है, तो मैं एक लिंक शामिल करने के लिए पोस्ट संपादित करूंगा।)
आशा है कि इससे मदद मिलती है!
'(शीट। कैल्स [1,1] रेंज के रूप में) .क्स्ट' बेहतर दिखता है। –
यह बेहतर दिखता है लेकिन अगर किसी कारण से सेल [1,1] प्रकार रेंज नहीं है तो हमारे पास अमान्य कैस्टेक्सप्शन के बजाय एक NullReferenceException होगा। मैं इस मामले में पठनीयता सुधारने की तुलना में अधिक सटीक अपवाद प्रकार प्राप्त करना पसंद करता हूं। – Pascal