मैं अपनी स्वादिष्ट CSV फ़ाइलों को खाने और बेकार के डेटा को निकालने से एक्सेल को कैसे रोक सकता हूं?


128

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

कुछ ग्राहक अपने द्वारा खरीदे गए विजेट के एक्सेल-संगत स्प्रेडशीट चाहते हैं। हम इसे एक PHP स्क्रिप्ट के साथ उत्पन्न करते हैं जो डेटाबेस पर सवाल उठाता है और परिणाम को स्टोर नाम और संबंधित डेटा के साथ CSV के रूप में आउटपुट करता है। यह पूरी तरह से अच्छी तरह से भी काम करता है।

जब एक पाठ संपादक जैसे नोटपैड या vi में खोला जाता है, तो फाइल इस तरह दिखाई देती है:

"Account Number","Store Name","S1","S2","S3","Widget Type","Date"
"4173","SpeedyCorp","268435459705526269","","268435459705526269","848 Model Widget","2011-01-17"

जैसा कि आप देख सकते हैं, सीरियल नंबर मौजूद हैं (इस मामले में दो बार, सभी माध्यमिक धारावाहिक समान नहीं हैं) और संख्याओं के लंबे तार हैं। जब यह फ़ाइल Excel में खोली जाती है, तो परिणाम बनता है:

Account Number  Store Name  S1  S2  S3  Widget Type Date 
4173    SpeedyCorp  2.68435E+17     2.68435E+17 848 Model Widget    2011-01-17

जैसा कि आपने देखा होगा, सीरियल नंबर डबल कोट्स द्वारा संलग्न हैं। Excel .csv फ़ाइलों में पाठ क्वालिफ़ायर्स का सम्मान नहीं करता है। इन फ़ाइलों को Access में आयात करते समय, हमें शून्य कठिनाई होती है। उन्हें पाठ के रूप में खोलते समय, कोई परेशानी नहीं। लेकिन एक्सेल, बिना असफल, इन फाइलों को बेकार कचरा में परिवर्तित करता है। गैर-डिफ़ॉल्ट एप्लिकेशन के साथ CSV फ़ाइल खोलने की कला में अंत उपयोगकर्ताओं को निर्देश देने की कोशिश हो रही है, हम कहेंगे, थकाऊ। क्या कोई उम्मीद है? क्या कोई सेटिंग है जिसे मैं खोजने में असमर्थ हूं? यह एक्सेल 2003, 2007 और 2010 के मामले में लगता है।


46
क्या मैं सिर्फ नाम के लिए +1 दे सकता हूं?
tombull89

11
Excel does not seem to respect text qualifiers in .csv files- डबल कोट्स टेक्स्ट क्वालिफ़ायर नहीं हैं , वे बस आपके डेटा में कॉमा की अनुमति देते हैं, यदि आप अपने डेटा में कॉमा का उपयोग नहीं करते हैं तो वे अर्थहीन हैं । CSV फ़ाइल का सभी डेटा अप्रमाणित है, इसलिए एक्सेल केवल अनुमान लगा सकता है कि आपका बड़ा सीरियल नंबर एक नंबर है , और जब आप एक्सेल की अधिकतम 15 अंकों की सटीकता से चलते हैं , जो कि आपके नंबरों को काट रहा है।
DMA57361

1
एक्सेल डबल कोट्स के भीतर सभी कॉमाओं का सम्मान नहीं करता है। "12 अगस्त, 2012" पर विचार करें, एक्सेल कचरे में बदल जाता है।
16

5
मैं इस एसयू प्रश्न का उल्लेख करना चाहता हूं । यह बताता है कि एक्सेल में सीएसवी के साथ काम करते समय आपके पास कौन से विकल्प हैं।
निक्कदा

1
@nixda धन्यवाद! वे उपयोगी सुझाव हैं, खासकर अधिक अनुभवी उपयोगकर्ताओं के लिए। मेरी समस्या लगभग एक मानवीय समस्या है, जिसमें एक्सेल खुद .csv फ़ाइलों के साथ जुड़ता है, और लोग आइकन देखते हैं, और डबल क्लिक करते हैं (क्योंकि यही आप चीजों को खोलते हैं), और फिर आमतौर पर सहेजें (क्योंकि हम हमेशा बता रहे हैं) उन्हें बचाओ!), और सब खो गया है। लेकिन जब संभव हो तो मैं आपके तरीकों का उपयोग जरूर करूंगा।
atroon

जवाबों:


58

लेकिन एक्सेल, बिना असफल, इन फाइलों को बेकार कचरे में परिवर्तित करता है।

एक्सेल बेकार कचरा है।

उपाय

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

आपके विकल्प हैं:

  1. अपने सीरियल नंबर में नॉन न्यूमेरिक, नॉट व्हॉट्सएप कैरेक्टर।
  2. कुछ डिफ़ॉल्ट स्वरूपण के साथ एक xls फ़ाइल या xlsx फ़ाइल लिखें।
  3. उन नंबरों को सूत्र के रूप में धोखा और आउटपुट करें ="268435459705526269","",="268435459705526269"(आप ="268435459705526269",,="268435459705526269"स्वयं को 2 वर्णों को बचाने के लिए भी कर सकते हैं )। यह सही ढंग से प्रदर्शित करने का लाभ है, और शायद आम तौर पर उपयोगी है, लेकिन आसानी से टूट गया (जैसा कि वे सूत्र हैं)।

विकल्प 3 के साथ सावधान रहें, क्योंकि कुछ प्रोग्राम (एक्सेल और ओपन ऑफिस कैल्क सहित), अब =""खेतों के अंदर कॉमा को बच निकलने के रूप में नहीं मानेंगे। इसका मतलब है कि ="abc,xyz"दो कॉलम होंगे और आयात को तोड़ देंगे।

"=""abc,xy"""इस समस्या को हल करने के प्रारूप का उपयोग करना , लेकिन यह विधि अभी भी Excel के सूत्र लंबाई सीमा के कारण आपको 255 वर्णों तक सीमित करती है।


1
दरअसल, यह कठोर नहीं है। Excel में उपरोक्त संख्याओं में से एक को कॉपी और पेस्ट करें, फिर सुझाए गए अनुसार संख्या प्रारूप को बदलें। Excel मान को बदलता है, जिसके परिणामस्वरूप कचरा होता है।
जो इंटरनेट

1
@ जो, मैं अपने प्रारंभिक अवलोकन पर बहुत ही सरसरी था। एक्सेल वास्तव में कचरा पैदा कर रहा है, और खुद कचरा है। मैंने अपना उत्तर अपडेट कर दिया है। एक विकल्प "एक्सेल सीएसवी" हो सकता है और एक "प्रयोग करने योग्य, सार्थक सीएसवी" भी हो सकता है
टायलर

2
@ टायलर - मुझे नहीं लगता कि एक्सेल कचरा है, सिर्फ यह कहना कि ओपी सही था कि वह इस मामले में कचरा पैदा कर रहा था। यह वास्तव में एक बहुत अच्छा सवाल है, बिना किसी सुंदर समाधान के।
जो इंटरनेट

1
प्रारूप कक्ष ... विकल्प का सुझाव दिया गया है, और मैंने इसका उपयोग करने की कोशिश की है। इस स्थिति में, जब आप फ़ाइल खोलते हैं, तो एक्सेल सीरियल्स को साइंटिफिक नोटेशन में परिवर्तित करने के लिए लगता है (सहमत नहीं है, अप्रत्याशित नहीं है) और सटीक को टॉस करता है। जब आप उन्हें संख्या या पाठ में बदलते हैं, तो स्ट्रिंग वापस नहीं आती है। यह वास्तव में समस्या का सार है। सूत्रों के अनुसार आउटपुट करना हालांकि यह कर सकता है ... मैंने ऐसा नहीं सोचा था।
atroon

9
@ DMA57361 व्यवहार अपेक्षित नहीं है, यह निर्धारक है। संख्यात्मक सटीकता को अच्छी तरह से प्रलेखित किया गया है, एक्सेल कैसे पढ़ता है CSVs नहीं है। चेतावनी और चुपचाप डेटा छोड़ने की कमी बेतुकी है। तथ्य यह है कि आप भी नहीं बता सकते एक्सेल कैसे डेटा आयात करने के लिए समान रूप से बेतुका है। क्या नकारात्मकता की आवश्यकता है ? नहीं, लेकिन ईमानदारी सबसे अच्छी नीति है और यही मैं महसूस करता हूं।
टायलर

42

हमारे पास एक ऐसी ही समस्या थी जहां हमारे पास CSV फाइलें थीं जिनमें 3-5 और रेंज जैसे कॉलम थे और एक्सेल हमेशा उन्हें तारीखों में परिवर्तित करता था जैसे 3-5 मार्च 3 होगा, जिसके बाद वापस संख्यात्मक पर स्विच करने से हमें एक बेकार तारीख पूर्णांक मिल गई। हम इसके आसपास हो गए

  1. CSV को TXT एक्सटेंशन में बदलना
  2. फिर जब हमने इसे एक्सेल में खोला, तो यह पाठ आयात विज़ार्ड में किक करेगा
  3. विज़ार्ड में चरण 3 के 3 में हमने बताया कि प्रश्न में कॉलम पाठ थे और उन्होंने ठीक से आयात किया।

आप यहाँ वही कर सकते हैं जो मैं सोचता हूँ।

पाठ आयात विज़ार्ड

चियर्स


2
इसे करने का सही तरीका होने के लिए +1। (संपादित करें: क्षमा करें समाधान को स्पष्ट करने के लिए थोड़ा संपादित करना पड़ा)
जय

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

1
पाठ आयात विज़ार्ड उत्तर है। अन्य सभी समाधान CSVs को देखने और संपादित करने के लिए Excel का उपयोग न करने के तरीके को समझने के परिणामस्वरूप अनावश्यक हैकरी हैं।
२२:२

1
@ एक्ससेल, इसे एक बार में एक फाइल ज़रूर करें। इस प्रक्रिया को स्वचालित करते समय, 'अनावश्यक हैकरी' अक्सर दिन बचाता है।
पल्ली हसबैंड

1
यह पूरी तरह से बेकार है जब CSV फ़ाइलों को प्रदर्शित करने के लिए मानक उपयोगकर्ताओं द्वारा एक्सेल का उपयोग किया जाता है। इससे पहले कि मैं यह समझाने की कोशिश करूं कि टेक्स्ट-इंपोर्ट-विजार्ड का उपयोग ~ 15 शुरुआती-कौशल कार्यालय उपयोगकर्ताओं के लिए कैसे किया जाए, मैं स्वयं द्वारा एक्सेल दस्तावेज़ स्रोत कोड टाइप करूंगा।
नॉर्थकिल्डनन

8

बेहतर समाधान XML कार्यपुस्तिका जनरेट करना है। ऐशे ही:

<?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  </OfficeDocumentSettings>

  <ss:Worksheet ss:Name="Sheet 1">
    <Table>
    <Column ss:Width="100"/>
    <Column ss:Width="100"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="150"/>
    <Column ss:Width="80"/>
    <Column/>

    <Row>
      <Cell><Data ss:Type="String">Account Number</Data></Cell>
      <Cell><Data ss:Type="String">Store Name</Data></Cell>
      <Cell><Data ss:Type="String">S1</Data></Cell>
      <Cell><Data ss:Type="String">S2</Data></Cell>
      <Cell><Data ss:Type="String">S3</Data></Cell>
      <Cell><Data ss:Type="String">Widget Type</Data></Cell>
      <Cell><Data ss:Type="String">Date</Data></Cell>
    </Row>

    <Row>
      <Cell><Data ss:Type="String">4173</Data></Cell>
      <Cell><Data ss:Type="String">SpeedyCorp</Data></Cell>
      <Cell><Data ss:Type="String">268435459705526269</Data></Cell>
      <Cell><Data ss:Type="String">x</Data></Cell>
      <Cell><Data ss:Type="String">268435459705526269</Data></Cell>
      <Cell><Data ss:Type="String">848 Model Widget</Data></Cell>
      <Cell><Data ss:Type="String">2011-01-17</Data></Cell>
    </Row>


    </Table>
    <x:WorksheetOptions/>
  </ss:Worksheet>
</Workbook>

फ़ाइल में .xml एक्सटेंशन होना चाहिए। एक्सेल और ओपनऑफिस इसे सही तरीके से खोलते हैं।


क्या आपका मतलब है कि डेटाबेस को XML प्रारूप में बदलने के लिए ओपी को PHP स्क्रिप्ट का उपयोग करना चाहिए?
प्रसन्ना

2
उपयोगकर्ताओं को खोलने से एक्सेल में बहुत अधिक क्लीनर। Excel में या अपने CSV को गड़बड़ कर रहा है ताकि केवल Excel ही आपके CSV को समझ सके। यह एक स्कीमा का भी जटिल नहीं है।
बिंकी

यह मानक दस्तावेज कहां है? मैं उपलब्ध डेटा प्रकारों के बारे में अधिक जानना चाहूंगा।
जॉन डोहर्टी

1

मेरा समाधान: मुझे सीरियल नंबर आयात करने के साथ एक ही मुद्दा मिला है। उन्हें संख्याओं के रूप में नहीं माना जाता है, अर्थात उस पर कोई गणितीय कार्य नहीं किया जाता है, लेकिन हमें वहां पूरी संख्या की आवश्यकता होती है। मेरे पास सबसे आसान काम है सीरियल नंबर में जगह डालना। जैसे "12345678 90123456 1234"। जब Excel इसे आयात करता है, तो इसे संख्यात्मक के बजाय पाठ के रूप में माना जाएगा।


0

मेरे पास लंबे समय से खाता संख्या है।

मैंने इसे कैसे तय किया:

अपनी फ़ाइल को खोलें। Libre Office / Open Office में खोलें (आपको सीमांकक आदि को निर्दिष्ट करना पड़ सकता है) फिर फ़ाइल को Excel XML फ़ाइल के रूप में सहेजें।

फिर इस फ़ाइल को एक्सेल में खोलें और फिर आप देखेंगे कि कॉलम अब वैज्ञानिक प्रारूप या जो भी हो, में नहीं बदले गए हैं। कॉलम को राइट-क्लिक करने के लिए और टेक्स्ट के रूप में फॉर्मेट को स्पष्ट रूप से सेट करें, फिर एक्सेल फाइल फॉर्मेट के रूप में सेव करें।

एक्सेल प्रारूप फ़ाइल खोलें और कॉलम अभी भी ठीक होना चाहिए!


1
जबकि यह काम करेगा , किसी को समझाने की कोशिश कर रहा है, जो केवल टूटी-फूटी अंग्रेजी बोलता है, उसे एक अलग कार्यालय सूट का उपयोग करने की आवश्यकता होगी क्योंकि यह कई समस्याओं का हल करता है। एम $ ऑफिस के लिए वैकल्पिक सॉफ्टवेयर मेरे अपने विचार में सभी के लिए अच्छा है, लेकिन मुझे एहसास है कि मैं हर किसी को परिवर्तित नहीं कर सकता।
एट्रॉन

0

आयात विज़ार्ड आकस्मिक उपयोगकर्ताओं और एक-बंद स्थितियों के लिए सबसे अच्छा समाधान है। यदि आपको प्रोग्रामेटिक समाधान की आवश्यकता है, तो आप QueryTables.Add पद्धति (जो आयात विज़ार्ड पर्दे के पीछे का उपयोग कर रहा है) का उपयोग कर सकते हैं।

Workbooks.Add
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "C:\myfile.csv", Destination:=Range("$A$1"))
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 2, 2) 'Edit this line. Add a number for each column, 1 is general, 2 is text. Search the internet for other formats.
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.