2012-07-24 19 views
5

मेरे पास एक बाहरी प्रोग्राम है जो सीएसवी फाइलों में डेटा निर्यात करता है। मेरे उपयोगकर्ता एक्सेल में वीबीए फ़ंक्शन के माध्यम से इस डेटा तक पहुंच प्राप्त करना चाहते हैं। ऐसा करने के लिए, मैंने CSV फ़ाइल को उस फ़ंक्शन में पढ़ने के बारे में सोचा जो ADODB.Recordset देता है। मेरे कोडरिटर्न सीएसवी फ़ाइल रिकॉर्डसेट

Public Function getData(fileName As String) As ADODB.Recordset 
Dim path As String 
path = "C:\testDir\" 
Dim cN As New ADODB.Connection 
Dim RS As New ADODB.Recordset 
cN.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
       "Data Source=" & path & ";" & _ 
       "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""") 
RS.ActiveConnection = cN 
RS.Source = "select * from " & fileName 
Set getData = RS 
End Function 

मैं इस बिंदु पर इस समारोह

Dim a As ADODB.Recordset 
Set a = getData("testFile.csv") 
a.Open() 

का उपयोग कर कॉल करने के लिए कोशिश कर रहा हूँ है, मैं कह रहा '=' की उम्मीद एक संकलन त्रुटि मिलती है। क्या कोई मुझे सही दिशा में इंगित कर सकता है कि मुझे डेटा के माध्यम से अपना फ़ंक्शन और लूप कैसे कॉल करना चाहिए?

+3

'ए। ओपन' (कोष्ठक के बिना)। –

+0

देखें http://stackoverflow.com/a/431546/190829 – JimmyPena

+0

@TimWilliams - क्या आप अपनी टिप्पणी को एवर के रूप में पुनः टाइप कर सकते हैं ताकि मैं इसे स्वीकार कर सकूं? –

उत्तर

5

टिम विलियम्स से इनपुट के साथ स्वयं के कुछ बदलावों के साथ इसे हल किया। यहाँ किसी और के लिए कोड मदद

Public Function getData(fileName As String) As ADODB.Recordset 

    Dim path As String 
    path = "C:\testDir\" 
    Dim cN As ADODB.Connection 
    Dim RS As ADODB.Recordset 
    Set cN = new ADODB.Connection 
    Set RS = new ADODB.Recordset 
    cN.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        "Data Source=" & path & ";" & _ 
        "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;""") 
    RS.ActiveConnection = cN 
    RS.Source = "select * from " & fileName 
    Set getData = RS 

End Function 

अब, समारोह

Dim a As ADODB.Recordset 
Set a = getData("testFile.csv") 
a.Open 
MsgBox(a.GetString()) 
a.Close 
+0

में कोई भी परिवर्तन करने के बिना फ़ंक्शन के आंतरिक कार्य को बदल सकता हूं, फ़ंक्शन के अंदर रिकॉर्डसेट को पार्स करना और रिकॉर्डसेट खोलने के बजाय स्ट्रिंग या सरणी वापस करना कितना बेहतर है ** उस कार्य के बाहर ** जो इसे बनाता है। – JimmyPena

+0

@ जिमीमेना - निश्चित रूप से रिकॉर्ड सेट लौटने से Arrays निश्चित रूप से क्लीनर होगा। मेरे पास मेरे फ़ंक्शन का दूसरा कार्यान्वयन है जो रिकॉर्ड सेट को सरणी में परिवर्तित करता है लेकिन इसे समाधान में नहीं जोड़ा क्योंकि यह मूल प्रश्न का हिस्सा नहीं था। लेकिन मुझे निश्चित रूप से एरे बेहतर –

+0

पसंद है, मैं सहमत हूं कि यहां सहायक कार्यों की एक श्रृंखला होनी चाहिए। – JimmyPena

-1

एक्सेल सीएसवी फ़ाइलों को सीधे आयात कर सकता है। तो क्यों न केवल अपने उपयोगकर्ताओं को सीएसवी फ़ाइल दें और उन्हें Excel में खोलने दें। फिर वे किसी भी अन्य स्प्रेडशीट की तरह अपनी स्क्रिप्ट को आवश्यकतानुसार चला सकते हैं?

क्या मुझे यहां कुछ याद आया है?

+0

डेटा आज एक सीएसवी फ़ाइल से आता है लेकिन कल डेटाबेस या टैब सीमित टेक्स्ट फ़ाइल से आ सकता है। मैं डेटा के स्रोत को छिपाना चाहता हूं और इसके बजाए एक फ़ंक्शन का पर्दाफाश करना चाहता हूं जो एक रिकॉर्डसेट देता है। इस तरह, मैं अपने कोड –

0

के रूप में मैं एक recordset पसंद करते हैं कहा जा सकता है क्योंकि मैं, पंक्तियों भरोसा कर सकते हैं आइटम को बदलने की जरूरत हो सकती है, नए हेडर आदि आवंटित ...

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