2009-04-16 19 views
6

मैं ओएलडीडीबी (सी #) का उपयोग कर एक्सेल फ़ाइल में लिख रहा हूं। मुझे केवल रॉ डेटा प्रारूप की आवश्यकता है।ओएलडीडीबी, एस्ट्रोफ़े के बिना एक्सेल सेल लिखना

मैं सभी कोशिकाओं (हेडर और मान) एपॉस्ट्रॉफ़ि (') द्वारा लगाई गई है और ध्यान दिया है

यह एक तरह से उन सब को पाठ कोशिकाओं में जोड़ने से बचने के लिए है?

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
filePath + ";Extended Properties='Excel 8.0;HDR=Yes'"; 

मैं कोशिश की है उपयोग इ एक्स = 1 इस तरह::

यहाँ मेरी कनेक्शन स्ट्रिंग है

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
    filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 

लेकिन उस के बाद मैं त्रुटि नीचे प्राप्त कर रहा हूँ:

माइक्रोसॉफ़्ट जेट डेटाबेस इंजन ऑब्जेक्टनहीं ढूंढ सका'सी: \ Temp \ नया फ़ोल्डर \ MF_2009_04_19_2008-11-182009_DMBHCSAM1118.xls'।
सुनिश्चित करें कि ऑब्जेक्ट मौजूद है और आप इसका नाम और पथ का नाम सही ढंग से वर्तनी करते हैं।

अंत में मैं कोशिश की है उपयोग इ एक्स = इस तरह 0:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
    filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\""; 

इस बार कोई exeptions उठाया।

दुर्भाग्य से वहाँ अभी भी अक्षर लोप के साथ समस्या यह है (ताकि प्रत्येक मेरी मूल्यों लगता है जैसे: '123' एबीसी आदि ...)

किसी भी विचार?

+0

आपने विस्तारित गुणों को परिभाषित करने के तरीके को क्यों बदल दिया? आपके मूल कनेक्शनस्ट्रिंग में, आपने सिंगल कोट्स का उपयोग किया: 'एक्सेल 8.0; एचडीआर = हां', लेकिन बाद में आप डबल कोट्स का उपयोग (बच निकला): \ "एक्सेल 8.0; एचडीआर = हाँ; आईएमईएक्स = 1 \" क्या यह समस्या हो सकती है? –

+0

ने इसका भी परीक्षण किया 'और व्यवहार वही है। – Maciej

+0

एक्सेल में याद रखें आप परिशुद्धता के 15 दशमलव बिंदु तक सीमित हैं। एडीओ शायद ऐसा करने के लिए ऐसा कर रहा है जिससे आप डेटा दर्ज कर सकें जो Excel अन्यथा गोल करने और छोटा करने का प्रयास कर सकता है। –

उत्तर

7

http://support.microsoft.com/kb/257819 आशय का एक बयान है कि इस व्यवहार अपरिहार्य जब ADO के माध्यम से एक्सेल में पाठ डालने हो सकता है? (स्ट्रॉ पर क्लचिंग ...)

0

मुझे पता है कि जब एक्सेल में डेटा दर्ज करने, एपोस्ट्रोफ़ी के साथ लगाकर यह पाठ फ़ील्ड में बनाने के लिए एक आसान तरीका है। क्या आप वाकई डेटा में एस्ट्रोफ़े नहीं रखते हैं? यदि यह प्रवेश समय पर डेटा में जोड़ा जाता है, तो आपका एकमात्र विकल्प उन्हें आयात समय पर पकड़ना होगा और कुछ कस्टम कोड में उनके साथ व्यवहार करना होगा।

+0

मुझे यकीन है कि डेटा डेटा जो मैं डाल रहा हूं इसमें apostrophes नहीं है। जैसे हेडर स्वचालित रूप से इंजन (विकल्प एचडीआर = हां) से बचत कर रहे हैं और उनमें वे वर्ण भी शामिल हैं ... – Maciej

0

resistry HKEY_LOCAL_MACHINE/सॉफ्टवेयर/माइक्रोसॉफ्ट/जेट/4.0/इंजन/एक्सेल/TypeGuessRows

यह फैसला करता है कि कितने पंक्तियों स्तंभ के लिए प्रारूप निर्णय लेने से पहले स्कैन किया जाना चाहिए की जाँच करें। डिफ़ॉल्ट 8 है, और 0 उचित डेटा प्रकार चुनने से पहले सभी कॉलम मान स्कैन करने के लिए एडीओ को मजबूर करेगा।

+0

ने इसे 0 में बदल दिया और दुर्भाग्य से यह मदद नहीं की ... :( – Maciej

0

यह आपकी आवश्यकताओं के अनुरूप नहीं हो सकता है, खासकर यदि आपको एक्सेल शीट में स्वरूपण सेट अप करने की आवश्यकता है, लेकिन क्या आपने डेटा को CSV फ़ाइल में लिखने और इसे .XLS एक्सटेंशन से सहेजने पर विचार किया है?

दूसरी चीज जो आप कोशिश कर सकते हैं, डेटा लोड करने का प्रयास करने से पहले "टेक्स्ट" (प्रारूप के माध्यम से> Excel के भीतर कक्ष) टाइप करने के लिए एक्सेल शीट में अपने लक्षित कक्षों के प्रारूप डेटा प्रकारों को स्पष्ट रूप से सेट करना होगा। डिफ़ॉल्ट रूप से, कक्ष "सामान्य" प्रकार के होंगे, और ड्राइवर आपके डेटा को पाठ पर प्रदर्शित करने के लिए प्रेरित करने के लिए एस्ट्रोफ़े जोड़ सकता है।

+0

टिप के लिए धन्यवाद। असल में हम इंटरऑप का उपयोग कर रहे हैं एक्सेल और कम या अधिक कामों को बचाने के लिए। लेकिन मेरा सादा ओएलडीडीबी में माइग्रेट करना था क्योंकि यह आसान और अधिक सुरुचिपूर्ण समाधान प्रतीत होता है। लेकिन जब तक कोई एस्ट्रोफ़ेहे समाधान नहीं मिला - मैं वर्तमान को रखूंगा। – Maciej

2

क्या आप एक्सेल डीएसएन का उपयोग कर सकते हैं? यह सुंदर सर्वव्यापी प्रतीत होता है। मैं नेट में नहीं पता है, तो एक अलग नज़रिए के साथ इस ले, लेकिन यहाँ एक शेयर मेज से सीधे एक OLEDB क्वेरी के लिए अपने कनेक्शन स्ट्रिंग है:

"Provider=MSDASQL.1;Persist Security Info=True;Extended Properties 
=""DSN=Excel Files;DBQ=" & filePath & "\" & fileName & 
";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;""" 

और मैं इस बुनियादी सम्मिलित बयान का इस्तेमाल किया:

INSERT INTO rngOutput VALUES (1, 'ABC', '$1.00', 1300) 

जब मैंने ऐसा किया, तो मेरे डेटा रेंज में मेरे पास कोई एस्ट्रोफ़ेस नहीं था। मैं Excel 2007 का भी उपयोग कर रहा हूं, और मुझे लगता है कि आप एक्सेल 8.0 का उपयोग अपने ड्राइवर के रूप में कर रहे हैं?

उम्मीद है कि आपको समाधान के लिए परेशान करता है!

A caution about editing Excel data with ADO: When you insert text data into Excel with ADO, the text value is preceded with a single quote. This may cause problems later in working with the new data.

डेटा स्पष्ट रूप से पाठ है, हो सकता है यह एक संख्यात्मक प्रारूप मजबूर किया:

-1

समस्या को हल करने के लिए निम्न हैक आज़माएं। निर्देशों के अनुसार टेम्पलेट को संशोधित करें

  1. शीर्ष डेटा पंक्ति में केवल शीर्ष पंक्ति पंक्ति के नीचे। आवश्यक प्रारूप में कॉलम प्रारूपित करें।
  2. संख्यात्मक मान आदि के लिए पात्रों के लिए अंतरिक्ष, 0 जैसे कुछ डमी मान दर्ज करें
  3. पहली डेटा पंक्ति डमी मानों हाइड एंड टेम्पलेट

अब ADO.net का उपयोग कर अपने डालने स्क्रिप्ट चलाने को बचाने के

-Venkat Kolla

+0

यह वास्तव में इस मुद्दे को हल नहीं कर रहा है। यह सिर्फ खराब डेटा पेश कर रहा है। –

1

कॉलम जो apostrophe टेम्पलेट फ़ाइल में संलग्न किया है के लिए कुछ डमी मान प्रविष्ट करें। नाम कॉलम के लिए उदाहरण के लिए कहें, इस डमीनैम की तरह कुछ डालें, और आयु कॉलम 99 डाल दें। टेम्पलेट में एक नई पंक्ति डालने के बजाय बस पंक्ति अपडेट करें (अपडेट ..... जहां नाम = 'डमीनाम' और आयु = 99)।

यह मेरे लिए काम किया है ..

यह आप के लिए भी काम करता है आशा है!