2012-01-31 20 views
8

बदलें मैं एक्सेल से डेटा पुनर्प्राप्त कर रहा हूं और अपने सरणी 0 आधारित रखना चाहता हूं लेकिन एक्सेल 1 आधार लौटाता है। क्या सरणी को 1 से 0 आधार में बदलने के लिए एक आसान तरीका है? या मुझे बस लूप बनाने की ज़रूरत है?बेस 1 एरे को बेस 0 एरे

यहाँ एक उदाहरण कोड यहीं:

dim oData(,) as object 
dim rng as range 
dim wks as worksheet = xlApp.Activeworkbook.sheets(Sheet1) 

rng=wks.Range("A1:B2") 

oData=rng.Value2 
+0

हां - लूप। मुझे यकीन नहीं है कि यह एक अच्छा अभ्यास है हालांकि - वीबीए के कामों से परिचित किसी को भी पता चलेगा कि रेंज() से संस्करण सरणी है। मान 1-आधारित है: यदि आप इसे 0-आधारित में बदलते हैं तो इससे हल होने से अधिक समस्याएं हो सकती हैं , विशेष रूप से अगर अन्यथा आपके कोड को बनाए रखने के लिए समाप्त होता है। –

+0

हां, मुझे यकीन नहीं था कि यह VB.NET में कैसे किया गया था, मैं एक लाइब्रेरी का उपयोग कर रहा हूं जिसे मैंने एक्सेल 2003 निष्पादन फ़ाइल से बनाया था और सोचा था कि यह इसके कारण अलग हो सकता है। मुझे पता है कि एक्सेल-डीएनए शून्य आधारित सरणी देता है, इसलिए मुझे लगता है कि यही कारण है कि मुझे लगता है कि यह 0-आधारित में .NET में मानक था। मुझे लगता है कि मैं 1-आधारित सरणी के साथ रहूंगा। यदि आप अपनी टिप्पणी को उत्तर के रूप में डालते हैं तो मैं इसे सही के रूप में चिह्नित करूंगा, जब तक कि कोई और अब और उसके बीच बेहतर उत्तर के साथ न आए। – Jon49

+0

@ टिमविल्लियम्स, मैंने अभी देखा है कि आप वीबीए के बारे में बात कर रहे थे। तो मुझे लगता है कि आपने .NET के लिए मेरे प्रश्न का उत्तर नहीं दिया। खैर, शायद कोई और इसे एक शॉट दे देगा! – Jon49

उत्तर

7

एक पाश सबसे आसान विकल्प है।

Dim target as string(0 to oData.Length - 1) 

For index = 1 to oData.Length 
    target(index - 1) = oData(index) 
Next 

स्मृति से था और परीक्षण नहीं किया गया लेकिन यह पर्याप्त स्पष्ट है।