2009-10-05 12 views
7

मैं अपने कार्यक्रम में एक Excel स्प्रेडशीट आयात और निम्न कोड के लिए की आवश्यकता होगी, कर रहा हूँ:जेट इंजन - 255 वर्ण काट-छांट

string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;IMEX=1;HDR=NO;""", MyExcelFile.xls); 

command.CommandText = "SELECT * FROM [Sheet1$]"; 

(ध्यान दें, कोड ऊपर वास्तविक कोड नहीं है, लेकिन जैसा कि आप देख देना चाहिए क्या मैं कर रहा हूं)

मुझे फ़ाइल आयात हो रही है, केवल एक्सेल शीट में कोई कॉलम समस्या है जो 255 से अधिक वर्णों को छोटा कर दिया गया है।

क्या ऐसा होने के आसपास कोई रास्ता है?

मैंने कहीं पढ़ा है कि यदि आप सुनिश्चित करते हैं कि पहले 8 पंक्तियों में कॉलम में टेक्स्ट की एक लंबी रेखा है, तो इसे एक ज्ञापन क्षेत्र के रूप में माना जाएगा और इसलिए छोटा नहीं किया गया है, लेकिन यह काम नहीं कर रहा था।

कोई विचार?

ग्रीम

उत्तर

1

शायद आपकी समस्या को एक आसान समाधान है, लेकिन एक अंतिम उपाय के रूप में, अपने Excel फ़ाइल एक CSV पाठ फ़ाइल के रूप को बचाने की कोशिश तो जेट के बजाय नियमित रूप से फ़ाइल और स्ट्रिंग परिवर्तन वर्गों का उपयोग इसे संसाधित इंजन।

+0

समाप्त यह इस तरह से कर रही है - अब मैं सी # के माध्यम से एक्सेल फाइल, सीएसवी करने के लिए इसे बचाने के लिए और फिर उस पार्स खोलें। धन्यवाद सभी – Graeme

+14

यह समाधान है? गंभीरता से? क्या एक क्रॉक; बेकार, बेकार एक्सेल स्प्रेडशीट्स। इस तरह के एक लोकप्रिय प्रारूप के लिए, यह सीमा से एक आवेदन में डेटा पढ़ने के लिए असंभव है। आज के रूप में xlsx स्प्रेडशीट पढ़ने के लिए कोई अच्छी तरह से बनाए रखा, ओपन-सोर्स, पूरी तरह से कार्यात्मक एपीआई नहीं है, और ये जेट और एसीई इंजन ऐसे हैंक हैं (पहले एक्स पंक्तियों को देखकर फ़ील्ड प्रकार अनुमान लगाते हैं, फ़ील्ड को 255 वर्णों में छंटनी करते हैं, विकल्पों को बदलने के लिए आवश्यक रजिस्ट्री हैक्स, कुछ विशेषताओं के लिए स्थापित करने के लिए एक्सेल आवश्यक है, एक्सेल परिवर्तन व्यवहार में फ़ाइल खुली है, आदि)। क्या मजाक है! – Triynko

+0

@Triynko: मैं पूरी तरह से सहमत हूं कि यह एक मजाक है, और दुख की बात है कि यह हमारे डेवलपर्स पर एक मजाक है :(इस तरह की चीजें मुझे एमएस से कुछ और करने के बारे में सोचने लगती हैं क्योंकि यह सब साबित करता है कि एमएस परवाह नहीं है :( –

6

इस बार कुछ बार टक्कर लगी। सौभाग्य से यहां एमएसडीएन पर वर्णित एक रजिस्ट्री हैक है, http://support.microsoft.com/kb/189897

प्रभावी रूप से, एक्सेल केवल डेटा की पहली आठ पंक्तियों को देखता है यह निर्धारित करने के लिए कि कॉलम कब तक होना चाहिए। 255 डिफ़ॉल्ट है यदि लंबाई 255 वर्ण या उससे कम है। ऊपर उल्लिखित एमएसडीएन आलेख बताता है कि रजिस्ट्री कुंजी "TypeGuessRows" कैसे जोड़ना है जो एक्सेल को बताता है कि स्तंभ लंबाई निर्धारित करने के लिए स्कैन करने के लिए कितनी पंक्तियां स्कैन करें।

+2

हाँ, यह मेरी बात है मूल पोस्ट - मेरी रजिस्ट्री की जांच की गई और TypeGuessRows मान 8 है। मैं जानबूझकर प्रत्येक कॉलम की पंक्ति 2 में 500 वर्णों का मूल्य डालता हूं जिसमें बड़े डेटा हो सकते हैं लेकिन ऐसा कोई फर्क नहीं पड़ता ... – Graeme

+0

http://blog.lab49.com/archives/196 से विचार यह है कि आप इस रजिस्ट्री प्रविष्टि के लिए 0 और 16 के बीच मानों का उपयोग कर सकते हैं। 0 का मतलब है कि पहली 16000 पंक्तियों को पढ़ें, 1 से 16 का अर्थ है पहली 1 से 16 पंक्तियां पढ़ें। तो इसे 500 पर सेट करना काम नहीं करेगा, लेकिन इसे 0 पर सेट करना चाहिए। – Rohith

-1

आमतौर पर मौजूदा तालिका में आयात करना सबसे अच्छा होता है। कोड के माध्यम से उपयुक्त तालिका बनाना बहुत मुश्किल नहीं है।

+1

और 255 लंबाई और अनुमान लगाने के उन समस्याओं के लिए दूर जाना? क्या आप कुछ कामकाजी नमूना प्रदान कर सकते हैं? –

+0

यदि आप एक्सेस में किसी मौजूदा तालिका में आयात करते हैं, तो प्रकार पहले से ही एक्सेस में सेट हैं, इसलिए लंबे टेक्स्ट को मेमो प्रकार के साथ सेट किया जाना चाहिए, 255 समस्या को समाप्त करना, और अन्य फ़ील्ड्स (कॉलम) को प्रासंगिक के साथ सेट अप करना चाहिए अनुमान लगाना, अनुमान लगाना। आकलन को खत्म करने के लिए रजिस्ट्री को बदलना भी संभव है। – Fionnuala

+0

क्या यह आपके लिए काम करता है या आप अनुमान लगा रहे हैं ("मुझे" मुझे दोषी नहीं ठहराया जाना चाहिए)? इसके अलावा आप "आकलन को खत्म करने के लिए रजिस्ट्री को बदल नहीं सकते", आप केवल अधिक विश्वसनीय अनुमान लगा सकते हैं, लेकिन इसे 100% समाप्त नहीं कर सकते हैं। –

0

क्योंकि मुझे आवश्यक सटीक उत्तर नहीं मिला, इसलिए अगर मैं इसे किसी की मदद करता हूं तो मैं इसे यहां छोड़ने जा रहा हूं।

HKEY_LOCAL_MACHINE ► Software ► Wow6432Node ► Microsoft ► Office ► 12.0 ► Access Connectivity Engine ► Engines 

TypeGuessRows = 0 

Source

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