2015-07-28 6 views
6

के साथ समस्या मैं Excel फ़ाइलों (दोनों xls और xlsx) में पढ़ने के लिए एक सी # लाइब्रेरी लिख रहा हूं और मैं एक समस्या में आ रहा हूं।एक्सेल डेटा निष्कर्षण - कॉलम डेटा प्रकार

क्या this question में व्यक्त की गई थी के रूप में वास्तव में एक ही है, अगर मेरे एक्सेल फ़ाइल में एक कॉलम स्ट्रिंग मान हैं कि है, लेकिन पहली पंक्ति में एक अंकीय मान है, OLEDB प्रदाता मानता है कि स्तंभ सांख्यिक होना और के लिए NULL रिटर्न उस कॉलम में मान जो संख्यात्मक नहीं हैं।

मुझे पता है कि, in the answer provided के रूप में, मैं रजिस्ट्री में बदलाव कर सकता हूं, लेकिन चूंकि यह एक पुस्तकालय है, मैं कई मशीनों पर उपयोग करने की योजना बना रहा हूं और हर उपयोगकर्ता के रजिस्ट्री मूल्यों को बदलना नहीं चाहता, मैं सोच रहा था कि क्या एक बेहतर समाधान है।

शायद एसीई.ओएलडीबी के अलावा एक डीबी प्रदाता (और ऐसा लगता है कि जेईटी अब पर विचार करने के लिए पर्याप्त रूप से समर्थित नहीं है)?

इसके अलावा, चूंकि इसे एक्सएलएस/एक्सएलएसएक्स पर काम करने की ज़रूरत है, इसलिए EPPlus/XML पाठक जैसे विकल्प xls संस्करण के लिए काम नहीं करेंगे।

+0

तरह से मैं इस समय इस समस्या के समाधान प्राप्त एक्सेल COM इंटरफेस और कुछ सी # का उपयोग कर, Excel में फ़ाइल खोलने के लिए और करने के लिए कर रहा है यह एक '.csv' रूप में फिर से बचाने के लिए फ़ाइल। मेरे पास एक मैक्रो भी है जो लोड हो जाता है और साफ-सुथरा सामान चलाता है लेकिन इस तरह सभी स्वरूपण को हटा देता है और एक आसान आयात की अनुमति देता है। – AeroX

+0

धन्यवाद, @ एरोएक्स, मैं इसके बारे में सोच रहा था, लेकिन यदि संभव हो तो इंटरऑप से बचने की कोशिश कर रहा हूं क्योंकि इससे कीड़े के अन्य डिब्बे खुलते हैं :) ... मुझे आशा है कि किसी और के पास दूसरा समाधान होगा, लेकिन धन्यवाद अपनी विधि साझा करने के लिए बहुत कुछ !! –

+0

इसके बजाय ओपनएक्सएमएल एसडीके का उपयोग करें। –

उत्तर

1

आपका कनेक्शन स्ट्रिंग इस

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcelfile.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1"; 

इ एक्स = 1 कनेक्शन स्ट्रिंग में की तरह दिखना चाहिए बात यह है कि आप मिश्रित डेटाप्रकार के रूप में स्तंभ के इलाज के लिए की जरूरत है। रजिस्ट्री को संपादित करने की आवश्यकता के बिना यह ठीक काम करना चाहिए।

एचडीआर = हां कॉलम हेडर के रूप में पहली पंक्ति को चिह्नित करने के लिए बस है और आपकी विशेष समस्या में इसकी आवश्यकता नहीं है, हालांकि मैंने इसे किसी भी तरह से शामिल किया है।

हमेशा उपयोग करने के लिए IMEX = 1 मिश्रित डेटा कॉलम के लिए डेटा पुनर्प्राप्त करने का एक सुरक्षित तरीका है।

स्रोत: https://www.connectionstrings.com/excel/

संपादित करें:

enter image description here

:

data

यहाँ आउटपुट है:

यहाँ डेटा मैं उपयोग कर रहा हूँ है

string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"""; 

using (DbClass db = new DbClass(connString)) 
{ 
    var x = db.dataReader("SELECT * FROM [Sheet1$]"); 
    while (x.Read()) 
    { 
     for (int i = 0; i < x.FieldCount; i++) 
      Console.Write(x[i] + "\t"); 
     Console.WriteLine(""); 
    } 
} 

DbClass एक सरल आवरण मैं आदेश जीवन को आसान बनाने के लिए किया जाता है: 363,210

इस सटीक कोड मैं प्रयोग किया जाता है। यह यहां पाया जा सकता:

http://tech.reboot.pro/showthread.php?tid=4713

+0

कोबे, मैंने इसे भी पढ़ा और IMEX = 1 सेट किया, लेकिन यह अभी भी काम नहीं कर रहा है .... –

+0

एफवाईआई, दुख की बात है, कोबे, मुझे यह ऑनलाइन मिला और ऐसा लगता है: 'IMEX = 1 "सेट करें कनेक्शन स्ट्रिंग के विस्तारित गुण अनुभाग। यह ImportMixedTypes = टेक्स्ट रजिस्ट्री सेटिंग को लागू करता है। आप [HKLM \ Software \ Microsoft \ Jet \ 4.0 \ Engines \ Excel \ ImportMixedTypes] को संख्यात्मक रूप से बदलकर प्रकार के प्रवर्तन को भी बदल सकते हैं। '- मूल रूप से IMEX = 1 रजिस्ट्री सेटिंग को मजबूत करता है, लेकिन अपने आप में पर्याप्त नहीं है। –

+0

मैंने सटीक कोड जोड़ा जो मैंने परीक्षण करने के लिए उपयोग किया था। क्या आप एक लिंक प्रदान कर सकते हैं जहां आपको वह मिला? साथ ही, मेरे पास जेईटी या एसीई के लिए उन रजिस्ट्री सेटिंग्स नहीं हैं। तो, मैं नहीं देखता कि यह कैसे हो सकता है। – Cory

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