कोई अपलोड नहीं, 100% स्थानीय, कोई खाता नहीं

लेख

Excel आपकी CSV फ़ाइलों को क्यों बिगाड़ देता है

तीन ज़ीरो से शुरू होने वाली पेशेंट ID। SEPT2 नाम का एक जीन। सोलह अंकों का अकाउंट नंबर। इनमें से किसी को भी स्प्रेडशीट में प्लेन CSV फ़ाइल के रूप में खोलें और Excel का इम्पोर्टर उन्हें सिर्फ़ दिखाता नहीं, दोबारा लिख देता है: ज़ीरो गायब हो जाते हैं, जीन का नाम तारीख़ बन जाता है, और अकाउंट नंबर अपने आखिरी कुछ अंक खो देता है। यह ठीक-ठीक कोई बग नहीं है, यह वही होता है जब एक जनरल-पर्पज़ नंबर-और-तारीख़ अनुमान लगाने वाला सिस्टम ऐसे टेक्स्ट से मिलता है जो सिर्फ़ नंबर या तारीख़ जैसा दिखता है। यहां है कि Excel के खुलते ही CSV फ़ाइल के साथ असल में क्या होता है, और इसे होने से पहले कैसे रोकें।

शुरुआती ज़ीरो गायब हो जाते हैं

किसी सेल में 02134 टाइप करें और Excel का डिफ़ॉल्ट कॉलम टाइप, General, इसे एक नंबर के रूप में पढ़कर शुरुआती ज़ीरो हटा देता है: 2134। यह ऐसे किसी भी कोड पर असर डालता है जो अंकों के रूप में स्टोर है लेकिन असल में कोई मात्रा नहीं है, जैसे US ZIP कोड, फ़्रेंच पोस्टल कोड, एम्प्लॉई या इनवॉइस नंबर, फ़ोन नंबर। तकनीकी रूप से अंडरलाइंग CSV फ़ाइल से कुछ नहीं खोता, सेल के बगल का टेक्स्ट तब तक नहीं बदलता जब तक आप वर्कबुक सेव नहीं करते, जिस पल Excel जो भी दिखा रहा था वही वापस लिखता है, और ज़ीरो हमेशा के लिए चले जाते हैं। इसका फ़िक्स है Excel को अनुमान लगाने का मौका मिलने से पहले बता देना कि कॉलम टेक्स्ट है: Data > From Text/CSV (या Get Data > From File) के ज़रिए आप हर कॉलम का डेटा टाइप साफ़-साफ़ सेट कर सकते हैं, या किसी अकेले सेल में वैल्यू से पहले एक अपॉस्ट्रोफ़ी जोड़कर टेक्स्ट फ़ोर्स कर सकते हैं।

Excel का General कॉलम टाइप टेक्स्ट 02134 को नंबर के रूप में पढ़ते हुए और शुरुआती ज़ीरो हटाकर 2134 दिखाते हुए

टेक्स्ट बिना पूछे तारीख़ बन जाता है

वही अनुमान लगाने वाला सिस्टम तारीख़-जैसा दिखने वाला टेक्स्ट भी ढूंढता है। MAR1 या SEPT2 वाला सेल, March 1 या September 2 के रूप में पढ़ा जाकर, बिना कोई चेतावनी दिखाए चुपचाप एक तारीख़ वैल्यू में बदल दिया जाता है और फिर से फ़ॉर्मेट किया जाता है। यह काल्पनिक नहीं है: 2020 में HUGO Gene Nomenclature Committee ने लगभग 27 मानव जीन सिंबल का नाम बदला, जिसमें SEPT2 और MARCH1 शामिल हैं, खासतौर पर इसलिए क्योंकि स्प्रेडशीट सॉफ़्टवेयर हर बार डेटासेट खुलने पर उन्हें तारीख़ में बदल देता था, यह समस्या इतनी गंभीर थी कि जीनोमिक्स पेपर के 2016 के एक सर्वे में सप्लीमेंट्री Excel फ़ाइल भेजने वाले लगभग हर पांच में से एक प्रकाशन में इस तरह की ऑटोकरेक्ट गलतियां मिलीं। यह सबक जीन नामों से आगे भी लागू होता है: कोई भी छोटा अल्फ़ान्यूमेरिक कोड जो दिन और महीने जैसा दिखता हो, उसी पल खतरे में है जब कोई आपकी CSV को किसी स्प्रेडशीट में खोले, सिर्फ़ आपकी ही नहीं।

बहुत लंबे नंबर अपने आखिरी अंक खो देते हैं

Excel हर नंबर को 15 महत्वपूर्ण अंकों की सटीकता वाले फ़्लोटिंग-पॉइंट वैल्यू के रूप में स्टोर करता है, एक सीमा जिसे Microsoft सीधे दस्तावेज़ में लिखता है। सोलह अंकों का कोई कार्ड या अकाउंट नंबर जैसे 4111111111111111 फ़िट होने के लिए राउंड हो जाता है, इसलिए आखिरी एक या दो अंक चुपचाप ज़ीरो बन जाते हैं और वैल्यू वह नहीं रहती जो आपने टाइप किया था। बाद में सेल को फ़ॉर्मेट करने से गायब अंक वापस नहीं आएंगे, क्योंकि अंडरलाइंग स्टोर किया नंबर पहले ही राउंड हो चुका होता है; इसका इकलौता फ़िक्स है Excel के इसे नंबर मानने से पहले कॉलम को टेक्स्ट के रूप में इम्पोर्ट करना, या वैल्यू के आगे अपॉस्ट्रोफ़ी लगाना।

Excel किसी नंबर के सिर्फ़ 15 महत्वपूर्ण अंक रखता है: 16-अंकों की वैल्यू 4111111111111111 राउंड हो जाती है और उसका आखिरी अंक ज़ीरो बन जाता है

एक्सेंट वाला टेक्स्ट गड़बड़ी बन जाता है

एन्कोडिंग ऑटोकरेक्शन से अलग एक फ़ेल्यर मोड है। बिना बाइट-ऑर्डर मार्क वाली CSV फ़ाइल प्लेन बाइट्स होती है; अगर इसे UTF-8 के रूप में सेव किया गया था, तो Windows पर Excel आमतौर पर सिस्टम के अपने कोडपेज को मानकर इसे खोलेगा, इसलिए एक्सेंट वाले अक्षर, करेंसी सिंबल और इमोजी mojibake बनकर आते हैं, café जैसी स्ट्रिंग कुछ café जैसी दिखने लगती है। Excel के लिए CSV बनाते समय सुरक्षित तरीका है इसे CSV UTF-8 के रूप में सेव करना या UTF-8 बाइट-ऑर्डर मार्क जोड़ना; किसी CSV को इस्तेमाल करते समय सुरक्षित तरीका है Data > From Text/CSV के ज़रिए इम्पोर्ट करना, जो सोर्स एन्कोडिंग को डबल-क्लिक के अंदाज़े पर छोड़ने की बजाय साफ़-साफ़ चुनने देता है।

Excel में खोले बिना डेटा को फ़ॉर्मेट के बीच ले जाना

यह सब असल में कोई Excel बग नहीं है, यह वही है जो स्प्रेडशीट का नंबर-और-तारीख़ अनुमान लगाने वाला सिस्टम करने के लिए बनाया गया है, और फ़ाइल चाहे जैसे भी खोली जाए, यह लागू होता है, सिर्फ़ Excel में नहीं। CSV फ़ाइल को दोबारा शेप देने या किसी कॉलम के स्प्रेडशीट तक पहुंचने से पहले सच में टेक्स्ट बने रहने की जांच करने का सबसे सुरक्षित तरीका है इस पर सीधे काम करना: हमारा डेटा कन्वर्टर CSV को एक स्टैंडर्ड, कोटिंग-अवेयर पार्सर से पार्स करता है और कभी किसी वैल्यू के टाइप को दोबारा इंटरप्रेट नहीं करता, इसलिए ZIP कोड या जीन का नाम ठीक वही टेक्स्ट रहता है जो आपने दिया था। यह पूरी तरह आपके ब्राउज़र में चलता है, आप जो भी पेस्ट करते हैं वह कहीं अपलोड नहीं होता। हालांकि यह सिर्फ़ कन्वर्ज़न स्टेप को सुरक्षित रखता है: अगर आउटपुट बाद में भी किसी स्प्रेडशीट में खोला जाना है, तो वहां भी संवेदनशील कॉलम को टेक्स्ट के रूप में मार्क करें।

इस लेख में उल्लेखित टूल्स

अक्सर पूछे जाने वाले सवाल

मैं Excel को CSV से शुरुआती ज़ीरो हटाने से कैसे रोकूं?

फ़ाइल को डबल-क्लिक करके न खोलें। इसकी बजाय Data > From Text/CSV (या Get Data) के ज़रिए इम्पोर्ट करें, जो कॉलम-दर-कॉलम डेटा टाइप चुनने का ऑप्शन दिखाता है; इम्पोर्ट पूरा होने से पहले ZIP कोड, ID या फ़ोन नंबर वाले कॉलम को Text सेट करें। हर सेल के लिए एक तेज़ फ़िक्स है वैल्यू से पहले अपॉस्ट्रोफ़ी टाइप करना, जैसे '02134, जो दिखने वाली चीज़ बदले बिना टेक्स्ट फ़ोर्स कर देता है।

Excel ने मेरी ID या कोड को तारीख़ में क्यों बदल दिया?

Excel का General कॉलम टाइप सक्रिय रूप से तारीख़-जैसा दिखने वाला टेक्स्ट ढूंढता है, जैसे कोई छोटा शब्द प्लस एक नंबर, या डैश या स्लैश से अलग दो नंबर, और बिना कोई कन्फ़र्मेशन मांगे मेल खाने वाली किसी भी चीज़ को बदल देता है। यही वजह थी कि 2020 में SEPT2 और MARCH1 जैसे जीन सिंबल का नाम बदलना पड़ा। शुरुआती ज़ीरो की तरह ही, इसे होने से रोकने के लिए कॉलम को Text के रूप में इम्पोर्ट करें।

क्या मेरी CSV को किसी और तरीके से कन्वर्ट करना इन समस्याओं से पूरी तरह बचाता है?

यह उस कन्वर्ज़न स्टेप के लिए इनसे बचाता है, हमेशा के लिए नहीं। हमारे डेटा कन्वर्टर जैसा पार्सर, जो हर फ़ील्ड को प्लेन टेक्स्ट मानता है, CSV को JSON में बदलते समय ZIP कोड या जीन का नाम दोबारा नहीं लिखेगा। लेकिन अगर आउटपुट बाद में आपके या इसे पाने वाले किसी और के द्वारा स्प्रेडशीट में खोला जाता है, तो उस प्रोग्राम के अपने इम्पोर्टर को वैल्यू फिर से इंटरप्रेट करने का एक और मौका मिल जाता है, इसलिए संवेदनशील कॉलम को वहां भी टेक्स्ट मार्क करना ज़रूरी है।

स्रोत