2010-08-20 13 views
5

मुझे एक्सेल शीट से डेट कॉलम पढ़ने में कोई समस्या है।क्या माइक्रोसॉफ्ट.जेट.ओएलडीबीबी को एमएम/डीडी/एक्सेल से वाई वाई वाई वाई प्रारूप में कॉलम प्राप्त करने का कोई तरीका है?

कभी-कभी लोग विभिन्न दिनांक प्रारूपों का उपयोग करते हैं और इससे कोई समस्या आती है। आइए मान लें कि जब मैं एक्सेल कॉलम से 07/26/2010 की अपेक्षा करता हूं तो मुझे 26-Jul-2010 मिलता है क्योंकि उपयोगकर्ता ने अपना दिनांक प्रारूप बदल दिया है।

मैं का उपयोग DataTable में xls शीट पढ़ने के लिए करता हूं।

क्या मैं ओएलडीबी रीडर को किसी भी तरह से एक्सएलएस पर सेटफॉर्मैट सेट कर सकता हूं, सभी तिथियों को एमएम/डीडी/वाई वाई वाई वाई प्रारूप में परिवर्तित करने के लिए?

मैं कोड के इस टुकड़े का उपयोग Excel फ़ाइल को पढ़ने के लिए: डाटासेट के माध्यम से

string strConn; 
strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      "Data Source=" + uploadedFileInfo.FullName + ";" + 
      @"Extended Properties=""Excel 8.0;HDR=NO;"""; 


using (OleDbConnection connToExcel = new OleDbConnection(strConn)) 
{ 
    //You must use the $ after the object you reference in the spreadsheet 
    connToExcel.Open(); 

    string firstSheetName = ExcelUploadedFileReaderBuilder 
          .GetFirstExcelSheetName(connToExcel); 

    OleDbDataAdapter myCommand 
    = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", firstSheetName), connToExcel); 

    DataSet myDataSet = new DataSet(); 

    myCommand.Fill(myDataSet, "uploadedExcelTable"); 

    DataTable dtUploadedExcel = myDataSet.Tables["uploadedExcelTable"]; 

    lineCount = GetLineNumberWhereNULLRowOccured(dtUploadedExcel) + 1; 

    connToExcel.Close(); 
} 

उत्तर

4

आपको सुझाए गए डेटासेट के माध्यम से लूप नहीं करना है। आप अपनी क्वेरी को अपनी इच्छित प्रारूप में निर्दिष्ट करके अपनी क्वेरी को सभी स्वरूपण कर सकते हैं।

OleDbDataAdapter myCommand = 
    new OleDbDataAdapter("SELECT FORMAT([DateCol], 'MM/dd/yyyy') as [DateCol] FROM [SheetName]", connToExcel); 

यह रूप में लंबे समय काम करने के लिए गारंटी है के रूप में आप जेट OLEDB या ऐस OLEDB डेटा प्रदाता का उपयोग कर रहे:
एक उदाहरण इस प्रकार है। मैं गारंटी नहीं दे सकता कि यह अन्य डेटा प्रदाताओं के साथ काम करेगा लेकिन आप हमेशा जांच सकते हैं।

+1

धन्यवाद एलेक्स। क्या आप जेईटी ओएलडीडीबी द्वारा उपयोग की जाने वाली क्वेरी भाषा को कवर करने वाले किसी भी संसाधन को जानते हैं? – pencilCake

+0

AFAIK, जेईटी ओएलडीडीबी एसक्यूएल पर चलता है और उस उद्देश्य के लिए, मैं संदर्भ के लिए एसक्यूएल पर एक पुस्तक का उपयोग करता हूं। (यही वह जगह है जहां से मुझे क्वेरी मिली।) पुस्तक एसक्यूएल फंडामेंटल 3 थी। जॉन जे पैट्रिक द्वारा। यह प्रेंटिस हॉल द्वारा प्रकाशित किया गया है। –

+0

चूंकि जेईटी एक्सेस के पीछे इंजन है, इसलिए Excel के लिए क्वेरी को समान वाक्यविन्यास का उपयोग एक्सेस के रूप में करना चाहिए। तो एक्सेस संदर्भ दस्तावेज़ मदद कर सकता है। –

1

लूप। प्रत्येक तारीख के लिए, इसे एक तारीख में गुप्त करें (यदि सेल को टेक्स्ट होने के लिए संशोधित किया गया है), और फिर दिनांक को "एमएम/डीडी/वाई वाईवायवाई" फ़ॉर्म की स्ट्रिंग के रूप में प्रारूपित करें।

निम्नलिखित कोड प्राप्त करने के लिए एक उदाहरण आप आरंभ है:

string date1 = "07/26/2010"; 
string date2 = "26-Jul-2010"; 

DateTime dt1 = Convert.ToDateTime(date1); 
DateTime dt2 = Convert.ToDateTime(date2); 

string date1B = dt1.ToString("MM/DD/YYYY"); 
string date2B = dt2.ToString("MM/DD/YYYY"); 

date1B और date2B बराबर होगा और प्रारूप है कि आप की इच्छा में।

कुछ पीछे और आगे रूपांतरण चल रहा है और ऐसा इसलिए है क्योंकि आपको एक्सेल से आने वाले उपयोगकर्ता इनपुट को सत्यापित करने की आवश्यकता होगी और उपयोगकर्ता के लिए डेटा दर्ज करना बहुत आसान है जो अनुरूप नहीं होगा आप डेटाबेस मॉडल।

कुछ प्रविष्टियों की तारीख वैध तारीखों के मामले में सभी को एक कोशिश-कैच ब्लॉक में रखना अच्छा विचार होगा।

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