excel - एक्सेल को यूटीएफ-8 सीएसवी फाइलों को स्वचालित रूप से पहचानना संभव है?




csv utf-8 (14)

  1. LibreOffice Calc डाउनलोड और स्थापित करें
  2. LibreOffice Calc में अपनी पसंद की सीएसवी फ़ाइल खोलें
  3. स्वर्ग का शुक्र है कि एक आयात पाठ विज़ार्ड दिखाता है ...
  4. ... अपने डेलीमीटर और चरित्र एन्कोडिंग विकल्प का चयन करें
  5. कैल्क में परिणामी डेटा का चयन करें और एक्सेल में पेस्ट कॉपी करें

https://code.i-harness.com

मैं एक ऐसे अनुप्रयोग का एक हिस्सा विकसित कर रहा हूं जो सीएसवी फाइलों में कुछ डेटा निर्यात करने के लिए ज़िम्मेदार है। एप्लिकेशन हमेशा सभी स्तरों पर बहुभाषी प्रकृति के कारण यूटीएफ -8 का उपयोग करता है। लेकिन एक्सेल में ऐसी सीएसवी फाइलें खोलना (जैसे डायक्रिटिक्स, सिरिलिक अक्षरों, यूनानी अक्षरों) को अपेक्षित परिणाम प्राप्त नहीं होते हैं जैसे कि Г„/Г¤, Г–/Г¶ । और मुझे नहीं पता कि Excel को कैसे मजबूर करना है कि खुली सीएसवी फ़ाइल यूटीएफ -8 में एन्कोड की गई है। मैंने यूटीएफ -8 बीओएम EF BB BF निर्दिष्ट करने का भी प्रयास किया, लेकिन एक्सेल ने इसे अनदेखा किया।

क्या कोई कामकाज है?

पीएस कौन सा टूल्स एक्सेल की तरह व्यवहार कर सकता है?

अद्यतन करें

मुझे कहना है कि मैंने समुदाय के प्रश्न के निर्माण के साथ भ्रमित कर दिया है। जब मैं इस सवाल से पूछ रहा था, तो मैंने एक्सेल में एक यूटीएफ -8 सीएसवी फ़ाइल खोलने का एक तरीका पूछा, बिना उपयोगकर्ता के किसी भी समस्या के, एक धाराप्रवाह और पारदर्शी तरीके से। हालांकि, मैंने गलत फॉर्मूलेशन का इस्तेमाल स्वचालित रूप से करने के लिए कहा था। यह बहुत भ्रमित है और यह वीबीए मैक्रो स्वचालन के साथ संघर्ष करता है। इस प्रश्न के दो जवाब हैं जिनकी मैं सबसे अधिक सराहना करता हूं: एलेक्स https://stackoverflow.com/a/6002338/166589 द्वारा पहला जवाब, और मैंने यह जवाब स्वीकार कर लिया है; और मार्क https://stackoverflow.com/a/6488070/166589 द्वारा दूसरा एक जो बाद में दिखाई दिया है। प्रयोज्यता के दृष्टिकोण से, एक्सेल में एक अच्छे उपयोगकर्ता के अनुकूल यूटीएफ -8 सीएसवी समर्थन की कमी थी, इसलिए मुझे लगता है कि दोनों उत्तरों सही हैं, और मैंने पहले एलेक्स के जवाब को स्वीकार कर लिया है क्योंकि यह वास्तव में कहा गया है कि एक्सेल करने में सक्षम नहीं था वह पारदर्शी रूप से। यही वह है जो मैं यहां स्वचालित रूप से उलझन में हूं। मार्क का उत्तर अधिक उन्नत उपयोगकर्ताओं को अपेक्षित परिणाम प्राप्त करने के लिए एक और जटिल तरीका को बढ़ावा देता है। दोनों जवाब बहुत अच्छे हैं, लेकिन एलेक्स का एक स्पष्ट रूप से निर्दिष्ट प्रश्न स्पष्ट रूप से स्पष्ट नहीं है।

अद्यतन 2

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


PHP-जेनरेट की गई CSV फ़ाइलों के साथ समान समस्याएं थीं। एक्सेल ने बीओएम को नजरअंदाज कर दिया जब सेपरेटर को सामग्री की शुरुआत में "sep=,\n" माध्यम से परिभाषित किया गया था (लेकिन निश्चित रूप से बीओएम के बाद)।

तो सामग्री की शुरुआत में एक बीओएम ( "\xEF\xBB\xBF" ) "\xEF\xBB\xBF" और अर्धविराम को fputcsv($fh, $data_array, ";"); माध्यम से विभाजक के रूप में सेट करना fputcsv($fh, $data_array, ";"); उसने चाल चली।


उत्तर की वास्तव में अद्भुत सूची, लेकिन चूंकि एक बहुत अच्छा अभी भी गुम है, मैं इसे यहां उल्लेख करूंगा: सीएसवी फ़ाइल को Google शीट्स के साथ खोलें और इसे अपने स्थानीय कंप्यूटर पर एक्सेल फ़ाइल के रूप में सहेजें।

माइक्रोसॉफ्ट के विपरीत, Google ने यूटीएफ -8 सीएसवी फाइलों का समर्थन करने में कामयाब रहा है, इसलिए यह वहां फाइल खोलने के लिए काम करता है। और एक्सेल प्रारूप में निर्यात भी काम करता है। तो भले ही यह सभी के लिए पसंदीदा समाधान न हो, फिर भी यह बहुत असफल हो गया है और क्लिक की संख्या जितनी अधिक हो सकती है उतनी अधिक नहीं है, खासकर जब आप पहले से ही Google में लॉग इन हैं।


एक्सेल पर फ़ाइल खोलने में रुचि रखने वाले उपयोगकर्ताओं की सहायता के लिए जो मेरे जैसे इस धागे को प्राप्त करते हैं।

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

  1. माइक्रोसॉफ्ट एक्सेल 2007 खोलें।
  2. डेटा मेनू बार विकल्प पर क्लिक करें।
  3. टेक्स्ट टेक्स्ट आइकन पर क्लिक करें।
  4. उस फ़ाइल के स्थान पर नेविगेट करें जिसे आप आयात करना चाहते हैं। फ़ाइल नाम पर क्लिक करें और फिर आयात बटन पर क्लिक करें। टेक्स्ट आयात विज़ार्ड - चरण 1 या 3 विंडो अब स्क्रीन पर दिखाई देगी।
  5. फ़ाइल प्रकार चुनें जो आपके डेटा का सबसे अच्छा वर्णन करता है - सीमित या निश्चित चौड़ाई।
  6. फ़ाइल उत्पत्ति के बगल में दिखाई देने वाली ड्रॉप-डाउन सूची से 65001: यूनिकोड (यूटीएफ -8) चुनें।
  7. टेक्स्ट आयात विज़ार्ड - चरण 2 या 3 विंडो प्रदर्शित करने के लिए अगला बटन पर क्लिक करें।
  8. उस फ़ाइल में उपयोग किए गए डेलीमीटर के बगल में एक चेकमार्क रखें जिसे आप माइक्रोसॉफ्ट एक्सेल 2007 में आयात करना चाहते हैं। डेटा पूर्वावलोकन विंडो आपको दिखाएगी कि आपके द्वारा चुने गए डेलीमीटर के आधार पर आपका डेटा कैसा दिखाई देगा।
  9. टेक्स्ट आयात विज़ार्ड को प्रदर्शित करने के लिए अगला बटन पर क्लिक करें - 3 का चरण 3।
  10. डेटा के प्रत्येक कॉलम के लिए उपयुक्त डेटा प्रारूप चुनें जिसे आप आयात करना चाहते हैं। यदि आप चाहें तो डेटा के एक या अधिक कॉलम आयात न करने का विकल्प भी आपके पास है।
  11. माइक्रोसॉफ्ट एक्सेल 2007 में अपना डेटा आयात करने के लिए फिनिश बटन पर क्लिक करें।

स्रोत: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


जैसा कि मैंने http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html पर पोस्ट किया है:

इसे सुधारने के लिए सीएसवी उत्पन्न करने के प्रभारी सॉफ्टवेयर डेवलपर को बताएं। त्वरित कार्यवाही के रूप में आप स्ट्रिंग की शुरुआत में यूटीएफ -8 बीओएम डालने के लिए जीएसड का उपयोग कर सकते हैं:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

यदि यह उपस्थित नहीं है तो यह आदेश यूटीएफ -4 बीओएम को सम्मिलित करता है। इसलिए यह एक idempotent कमांड है। अब आप फ़ाइल को डबल क्लिक करने और Excel में इसे खोलने में सक्षम होना चाहिए।


पहले एक्सेल स्प्रेडशीट को यूनिकोड टेक्स्ट के रूप में सहेजें। इंटरनेट एक्सप्लोरर का उपयोग करके TXT फ़ाइल खोलें और "एएसटी के रूप में सहेजें" पर क्लिक करें TXT एन्कोडिंग - उपयुक्त एन्कोडिंग चुनें, यानी विन सिरिलिक 1251 के लिए


मेरे पास अतीत में एक ही समस्या है (एक्सेल फ़ाइलों को कैसे उत्पन्न किया जा सकता है, और अन्य टूल्स भी पढ़ सकते हैं)। मैं सीएसवी की बजाय टीएसवी का उपयोग कर रहा था, लेकिन एन्कोडिंग के साथ एक ही समस्या आई।

मैं एक्सेल को स्वचालित रूप से यूटीएफ -8 को पहचानने के लिए कोई रास्ता नहीं ढूंढ पाया, और मैं फाइलों के उपभोक्ताओं पर जटिल निर्देशों को कैसे खोलने के लिए तैयार / तैयार नहीं था। इसलिए मैंने उन्हें यूटीएफ -8 के बजाय यूटीएफ -16 (बीओएम के साथ) के रूप में एन्कोड किया। आकार दो बार, लेकिन एक्सेल एन्कोडिंग को पहचान सकता है। और वे अच्छी तरह से संपीड़ित होते हैं, इसलिए आकार शायद ही कभी (लेकिन दुख की बात नहीं है) मामलों।


यदि आप इसे पूरी तरह से स्वचालित बनाना चाहते हैं, तो एक क्लिक करें, या वेब पेज से एक्सेल में स्वचालित रूप से लोड करना चाहते हैं, लेकिन उचित एक्सेल फ़ाइलों को उत्पन्न नहीं कर सकते हैं, तो मैं एक विकल्प के रूप में SYLK प्रारूप को देखने का सुझाव दूंगा। ठीक है यह सीएसवी जितना आसान नहीं है लेकिन यह पाठ आधारित है और इसे लागू करने में बहुत आसान है और यह बिना किसी समस्या के यूटीएफ -8 का समर्थन करता है।

मैंने एक PHP क्लास लिखा है जो डेटा प्राप्त करता है और एक SYLK फ़ाइल आउटपुट करता है जो फ़ाइल पर क्लिक करके एक्सेल में सीधे खुल जाएगा (या यदि आप फ़ाइल को सही माइम प्रकार के साथ वेब पेज पर लिखते हैं तो एक्सेल लॉन्च करेगा। आप यहां तक ​​कि प्रारूपण जोड़ें (जैसे बोल्ड, विशेष तरीकों से प्रारूप संख्या आदि) और स्तंभों में टेक्स्ट में कॉलम आकार, या ऑटो आकार कॉलम बदलें और सभी कोड में शायद लगभग 100 लाइनों से अधिक नहीं है।

सरल स्प्रेडशीट बनाकर और SYLK के रूप में सहेजकर और फिर इसे टेक्स्ट एडिटर के साथ पढ़कर, इंजीनियर को SYRK को रिवर्स करना आसान है। पहला ब्लॉक शीर्षलेख और मानक संख्या प्रारूप हैं जिन्हें आप पहचानेंगे (जिसे आप केवल आपके द्वारा बनाई गई प्रत्येक फ़ाइल में पुनर्जन्म देते हैं), फिर डेटा केवल एक एक्स / वाई समन्वय और एक मान है।


यह एक पुराना सवाल है लेकिन मुझे अभी भी एक ही समस्या का सामना करना पड़ा है और समाधान दूसरों की मदद कर सकता है:

एक ही समस्या थी जहां फ़ाइल में सीएसवी टेक्स्ट डेटा लिखना था, फिर एक्सेल में परिणामस्वरूप .csv खोलना सभी पाठ को एक कॉलम में बदल देता है। उपरोक्त उत्तरों को पढ़ने के बाद मैंने निम्नलिखित की कोशिश की, जो समस्या को हल करने लगता है।

जब आप अपना StreamWriter बनाते हैं तो यूटीएफ -8 के एन्कोडिंग को लागू करें। बस।

उदाहरण:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

यह एक पुराना सवाल है लेकिन शीर्ष पर खोज में आता है। मुझे कई प्रयासों के बाद पता चला कि सीएसवी फ़ाइल की शुरुआत में बीओएम वर्ण जोड़ने में मदद मिलती है।

मैंने इसे यहां संक्षेप में बताया है: https://sites.google.com/site/ritechtips/home/the-multi-line-fields-csv-file-and-excel-import---ha


यह सवाल को सही ढंग से संबोधित नहीं कर रहा है, लेकिन चूंकि मैंने इस पर ठोकर खाई है और उपर्युक्त समाधान मेरे लिए काम नहीं करते हैं या जिनकी आवश्यकताएं मैं पूरा नहीं कर पाती थी, यहां आपके पास वीम तक पहुंचने पर बीओएम जोड़ने का एक और तरीका है:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

यूटीएफ -8 टेक्स्ट और सीएसवी फाइल खोलने के लिए सरल वीबीए मैक्रो

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

उत्पत्ति: = 65001 यूटीएफ -8 है। कॉमा: कॉलम में वितरित .csv फ़ाइलों के लिए सच है

इसे हमेशा उपलब्ध कराने के लिए Personal.xlsb में सहेजें। एक्सेल टूलबार को एक मैक्रो कॉल बटन जोड़ने और वहां से खुली फाइलें वैयक्तिकृत करें। आप मैक्रो में अधिक फॉर्मेटिंग जोड़ सकते हैं, जैसे कॉलम ऑटोफिट, संरेखण इत्यादि।


हमने इस कामकाज का उपयोग किया है:

  1. सीएसवी को यूटीएफ -16 में कनवर्ट करें
  2. फ़ाइल की शुरुआत में बीओएम डालें
  3. फ़ील्ड विभाजक के रूप में टैब का प्रयोग करें

हाँ यह संभव है। सीएसवी बनाने वाली स्ट्रीम लिखते समय, पहली बात यह है:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)




utf-8