2012-07-09 6 views
5

मेरे पास एक वीएसटीओ एडिन है और मैं एक्सेल वर्कशीट से डेटा पढ़ रहा हूं।क्या रेंज से एक इंट प्राप्त करना संभव है। वीएसटीओ में वैल्यू?

ऐसा लगता है कि लगभग सभी संख्यात्मक डेटा को double के रूप में पढ़ा जाता है। Range.Value से int मान प्राप्त करना कभी भी संभव है?

मेरा कुछ मतलब यह दिखाने के लिए यहां कुछ कोड है।

Worksheet w = (Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets["Sheet1"]; 
var value = ((Range)w.Cells[1, 1]).Value; 
bool isInt = value is int; 
bool isDouble = value is double; 

कोई फर्क नहीं पड़ता जो प्रारूप मैं कार्यपत्रक पत्रक 1, सेल A1 में उपयोग करते हैं, isInt हमेशा वापस झूठी आता है।

क्या कोई प्रारूप है जिसका उपयोग int प्राप्त करने के लिए किया जाना चाहिए? मैंने सोचा कि शायद General या 0 काम करेगा, लेकिन ऐसा नहीं लगता है।

+1

मुझे नहीं लगता कि आप कभी भी प्राप्त होता है एक इंटेल - एक्सेल आंतरिक रूप से एक int के रूप में संख्याओं को कभी भी स्टोर नहीं करता है, हमेशा एक डबल। – Govert

+0

@Govert ठीक है, मुझे यही संदेह है लेकिन मैं पुष्टि चाहता था। यदि आप एक उत्तर पोस्ट करते हैं (अधिमानतः उस एक्सेल टिडबिट के स्रोत के साथ) मैं इसे स्वीकार करूंगा। –

उत्तर

0

docs से जब आप var value = ((Range)w.Cells[1,1]).Value पर कॉल करते हैं Value प्रकार वर्कशीट से मान प्रकार से लिया गया है। तो ऐसा लगता है कि आपके एक्सेल वर्कशीट में doubles के रूप में प्रारूपित मान हैं, int एस नहीं। एक्सेल के लिए कोई "पूर्णांक" स्वरूपण नहीं है जो सी # में अनुवाद करेगा, सर्वोत्तम शर्त यह होगी कि जब आप इसे पढ़ते हैं तो integer के रूप में मूल्य डालना होगा। Value प्रकार एक्सेल वर्कशीट के भीतर जो भी प्रारूप था, वह आता है।

This article दिखाता है कि Excel डबल परिशुद्धता फ़्लोटिंग पॉइंट मानों से कैसे निपटता है।

+0

ठीक है, लेकिन मेरा सवाल अनिवार्य रूप से है, "वर्कशीट प्रारूप मुझे 'int' क्या देगा?" सामान्य, संख्या के साथ संख्या, पाठ, लेखांकन सभी मुझे युगल देते हैं। क्या मुझे कुछ याद आ रहा है या क्या ऐसा कोई प्रारूप नहीं है? –

+1

आह, थोड़ा सा शोध करने से पता चलता है कि ऐसा लगता है कि संख्या हमेशा एक्सेल में युगल के रूप में संग्रहीत होती है। आप कस्टम प्रारूप बना सकते हैं जो वर्कशीट में int की तरह _looks_ है, लेकिन जब आप C# से मानों को क्वेरी करते हैं तो उन्हें युगल के रूप में वापस कर दिया जाएगा। यदि आप ऐसा करते हैं, हालांकि आप गारंटी दे सकते हैं कि मान (युगल के रूप में) ** वास्तव में ** पूर्णांक होंगे, तो आप केवल int के रूप में डाले जा सकते हैं। – NominSim

+0

समझ गया। क्या आप Excel में संग्रहीत केवल युगल के बारे में स्रोत प्रदान कर सकते हैं? –

2

संख्यात्मक Range.Value द्वारा लौटाए गए मूल्यों युगल हैं (संभवतः क्योंकि वे सब जमा हो जाती है Excel में दोगुना हो जाता है के रूप में, एक नंबर एक पूर्णांक की तरह लग रही है या नहीं स्वरूपण का परिणाम है)

केवल ints कि मैंने देखा है GetValue के माध्यम से आने वाले त्रुटियों के लिए त्रुटि कोड हैं

उदाहरण

  • DIV/0! -2146826281
1

गोवर्ट के मूल्य के साथ एक इंट 32 है यह कहने में सही है कि Excel कभी भी पूर्णांक के रूप में संख्याओं को संग्रहीत नहीं करता है।

एक्सेल संख्यात्मक मान Double Precision Floating Point संख्याओं के रूप में संग्रहीत करता है, या जैसा कि आप Doubles को संक्षिप्त के लिए जानते हैं।

Doubles 8-बाइट चर हैं जो लगभग 15 दशमलव स्थानों तक सटीक संख्याओं को स्टोर कर सकते हैं।

संपादित: http://support.microsoft.com/kb/78113

1

मैं यकीन है कि सभी नंबरों को Excel में डबल्स हैं हूँ:

जब से तुम देख रहे एक कड़ी के लिए, इस

लिंक देखें। उदाहरण के लिए निम्नलिखित वीबीए कोड एक सेल मान को एक लंबे पूर्णांक (Int32) पर सेट करता है, फिर उसे वापस पढ़ता है।

Dim n As Long 
n = 123 
Range("A1").Value = n 
Debug.Print VarType(n) 

Dim v As Variant 
v = Range("A1").Value 
Debug.Print VarType(v) 
  • इनपुट है VarType (एन) = 3 = vbLong (Int32)
  • आउटपुट VarType है (v) = 5 = vbDouble
संबंधित मुद्दे