दिलचस्प पोस्ट
एक जार के अंदर एक फ़ाइल को संशोधित करना सरणी तत्वों की घटनाओं / आवृत्तियों की गिनती PHP: दो सरणियों को मर्ज करते हुए चाबियाँ बदलने की बजाए reindexing? __file__ चर का मतलब क्या करता है / करते हैं? हटायें लिंक "3" में "हटाएं" के बजाय "Get" भेजता है सूत्रों का एक अलग ढेर है? त्रुटि: 'ब्रू लिंक' चरण सफलतापूर्वक पूरा नहीं हुआ वेबपेज को एएसपी.नेट से छवि में कनवर्ट करें एचटीएमएल PHP "if" स्टेटमेंट के अंदर एम्बेड किया जा सकता है? JQuery के सत्यापन प्लगइन का उपयोग कर रेडियो बटन समूह की मान्यता मैं एक डीजेंगो ऐप के बाहर एक मॉडल को कैसे बदलूं और एक नए में? सी # एसआईपी स्टैक / लाइब्रेरी नेस्टेड क्लास 'का दायरा? आईओएस लॉन्चिंग सेटिंग -> प्रतिबंध यूआरएल योजना आरडीएल रिपोर्ट पर आरडीएलसी का उपयोग कब करना है?

एक्सेल के लिए सीएसवी फ़ाइल जनरेट करना, मूल्य के अंदर एक नई लाइन कैसे है

मुझे Excel के लिए एक फ़ाइल बनाने की आवश्यकता है, इस फाइल में से कुछ मान में कई पंक्तियाँ हैं

वहां भी गैर-अंग्रेज़ी पाठ है, इसलिए फ़ाइल को यूनिकोड होना चाहिए।

अब जो फ़ाइल मैं पैदा कर रहा हूं, वह इस तरह दिखता है: (यूटीएफ 8 में, बिना गैर अंग्रेजी पाठ में और कई लाइनों के साथ मिश्रित)

Header1,Header2,Header3 Value1,Value2,"Value3 Line1 Value3 Line2" 

नोट करें कि बहु-पंक्ति मान डबल कोट्स में संलग्न है, इसमें एक सामान्य दैनिक न्यूलाइन के साथ।

एक्सेल 2007 और यूटीएफ 8 फाइलों में कम से कम नहीं जीतने वाले वेब पर मुझे क्या मिला, लेकिन एक्सेल तीन पंक्ति को डेटा की दूसरी पंक्ति के रूप में मानता है, जो पहले डेटा पंक्ति की दूसरी पंक्ति के रूप में नहीं है ।

यह मेरे ग्राहक की मशीनों पर चलाना होगा और मेरे पास एक्सेल के उनके संस्करण पर कोई नियंत्रण नहीं है, इसलिए मुझे समाधान की जरूरत है जो Excel 2000 और बाद में काम करेगा।

धन्यवाद

संपादित करें: मैंने दो सीएसवी विकल्प, एक एक्सेल (यूनिकोड, टैब अलग, फ़ील्ड में कोई नई पंक्तियां नहीं) और बाकी दुनिया (UTF8, मानक सीएसवी) के लिए एक के द्वारा मेरी समस्या "हल" की है।

नहीं जो मैं देख रहा था लेकिन कम से कम यह काम करता है (अभी तक)

वेब के समाधान से एकत्रित समाधान "एक्सेल के लिए सीएसवी फ़ाइल जनरेट करना, मूल्य के अंदर एक नई लाइन कैसे है"

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

यदि आपके पास फ़ाइल में गैर-एएससीआईआई वर्ण (यूटीएफ -8 में एन्कोडेड) है, तो फ़ाइल के आरंभ में आपके पास यूटीएफ -8 बीओएम (3 बाइट्स, hex EF BB BF ) होना चाहिए। अन्यथा एक्सेल आपके लोकेल की डिफ़ॉल्ट एन्कोडिंग (जैसे cp1252) के अनुसार utf-8 के स्थान पर डेटा का व्याख्या करेगा, और आपके गैर- ASCII वर्ण ट्रैश किए जाएंगे

निम्नलिखित टिप्पणियां एक्सेल 2003, 2007 और 2013 पर लागू हैं; Excel 2000 पर परीक्षण नहीं किया गया

यदि आप फ़ाइल को विंडोज एक्सप्लोरर में उसके नाम पर डबल-क्लिक करके खोलते हैं, तो सब कुछ ठीक है।

अगर आप इसे एक्सेल में से खोलते हैं, तो परिणाम अलग-अलग होते हैं:

  1. फ़ाइल में आपके पास केवल ASCII वर्ण हैं (और कोई BOM नहीं): काम करता है
  2. आपके पास फ़ाइल में यूटीएफ -8 बीओएम के साथ फाइल में गैर-एएससीआईआई अक्षर (यूटीएफ -8 में एन्कोडेड) हैं: यह पहचानता है कि आपके डेटा को यूटीएफ -8 में एन्कोड किया गया है, लेकिन यह सीएसवी एक्सटेंशन की उपेक्षा करता है और आपको पाठ में जाता है गैर-विज़ार्ड आयात करें , दुर्भाग्य से परिणाम के साथ आप लाइन-ब्रेक समस्या प्राप्त करते हैं।

विकल्पों में शामिल हैं:

  1. उपयोगकर्ताओं को एक्सेल में फाइल खोलने के लिए प्रशिक्षित नहीं करें 🙁
  2. एक XLS फ़ाइल सीधे लिखने पर विचार करें … पायथन / पर्ल / पीएचपी / .नेट / आदि में ऐसा करने के लिए पैकेज / लाइब्रेरी उपलब्ध हैं

बहुत सारे tweaking के बाद, यह एक विन्यास है जो लिनक्स पर फाइलों को बनाने, विंडोज़ + एक्सेल पर पढ़ने के काम करता है

  • एक क्षेत्र के भीतर न्यूलाइंस होने की आवश्यकता होती है \ n (और दोहरे उद्धरण में जाहिर उद्धृत)
  • रिकॉर्ड का अंत: \ r \ n
  • सुनिश्चित करें कि आप किसी फ़ील्ड को बराबर के साथ शुरू नहीं करते हैं, अन्यथा यह एक सूत्र के रूप में माना जाता है और छोटा किया जाता है

पर्ल में, मैंने टेक्स्ट :: सीएसवी का प्रयोग इस प्रकार किया था:

 use Text::CSV; open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!"; my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" }); #for each row...: $csv -> print ($FO, \@row); 

हाल ही में मुझे ऐसी ही समस्या थी, मैंने इसे एक HTML फ़ाइल आयात करके हल किया, आधारभूत उदाहरण इस तरह होगा:

 <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <style> <!-- br {mso-data-placement:same-cell;} --> </style> </head> <body> <table> <tr> <td>first line<br/>second line</td> <td style="white-space:normal">first line<br/>second line</td> </tr> </table> </body> </html> 

मुझे पता है, यह एक सीएसवी नहीं है, और एक्सेल के विभिन्न संस्करणों के लिए अलग तरीके से काम कर सकता है, लेकिन मुझे लगता है कि यह एक कोशिश के लायक है।

आशा है कि ये आपकी मदद करेगा 😉

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

यह मेरे लिए Excel 2010 और Excel 2000 दोनों में काम करता है। हालांकि, यह आश्चर्यजनक रूप से काम करता है, जब आप फ़ाइल को एक नई स्प्रैडशीट के रूप में खोलते हैं, न कि जब आप इसे डेटा आयात सुविधा का उपयोग करते हुए किसी मौजूदा स्प्रैडशीट में आयात करते हैं।

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

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

एक पीसी पर, ASCII वर्ण # 10 वह है जिसे आप एक मूल्य के भीतर एक नई पंक्ति रखना चाहते हैं।

एक बार जब आप इसे एक्सेल में प्राप्त कर लेते हैं, तो आपको यह सुनिश्चित करने की ज़रूरत होती है कि मल्टी लाइन सेल के लिए वर्ड रैप चालू हो या नया स्क्वायर बॉक्स के रूप में दिखाई देगा।

यह कार्य नहीं करेगा यदि आप फ़ाइल को एक्सेल में आयात करने का प्रयास करें।

EXCEL.EXE के साथ फ़ाइल एक्सटेंशन सीएसवी संबद्ध करें ताकि आप सीएसवी फ़ाइल को डबल क्लिक करके EXCEL खोल सकें।

यहां मैं कुछ लिखे गए पाठ के बाद न्यूलाइन चार्चे के बाद कुछ और टेक्स्ट और डबल स्ट्रिंग्स को डबल कोट्स के साथ जोड़ दिया।

सीआर का उपयोग न करें क्योंकि एक्ससेल अगले सेल में स्ट्रिंग का हिस्सा रखेगा।

 ""text" + NL + "text"" 

जब आप एक्सेल खोलेंगे, तो आप इसे देखेंगे। आपको ऑटो के आकार का आकार सभी को देखने के लिए हो सकता है जहां पंक्ति खंड सेल की चौड़ाई पर निर्भर करेगा।

2

तारीख

यहां मूल में कोड है

 CHR$(34,"2", 10,"DATE", 34) 

यूटीएफ फाइलें जिनमें एक बीओएम है, एक्सेल को नई लाइनों का इलाज करने के लिए का कारण होगा क्योंकि उस क्षेत्र में उद्धरण चिह्नों से घिरा हुआ है। (टेस्टेड एक्सेल 2008 मैक)

समाधान एक लाइन फ़ीड के बजाय किसी भी नई लाइन को कैरिज रिटर्न (सीएचआर 13) बनाने के लिए है

प्रत्येक पंक्ति के अंत में "\ r" को वास्तव में एक्सेल में लाइन ब्रेक का असर पड़ा था, लेकिन। सीसीवी में यह गायब हो गया और एक बदसूरत गड़बड़ा छोड़ा जहां हर पंक्ति को कोई स्थान नहीं मिला और कोई लाइन ब्रेक न हो

जिस तरह से हम इसे करते हैं (हम वीबीनेट का उपयोग करते हैं), क्रो (34) में नई लाइनों के साथ पाठ संलग्न करना है जो कि दोहरे उद्धरण चिह्नों का प्रतिनिधित्व करता है और एलएफ के लिए सभी सीआर-एलएफ़ वर्णों को बदलता है।

मैंने यह पाया और यह मेरे लिए काम किया है

 $delimiter = ','; $enc1 = '"'; $enc2 = '""'; 

तब जहां आपको सामान संलग्न होना चाहिए

 $myfile = ('/path/to/myfile.csv'); //erase any previous contents $fp = fopen($myfile, 'w+'); fwrite($fp, $enc1 . 'Column Heading 1' . $enc1 . $delimiter ); //append to new file $fp2 = fopen($myfile, 'a'); fwrite($fp2, $enc1 . 'Column Heading 2' . $enc1 . $delimiter ); 

…..

 fwrite($fp2, $enc1 . 'Last Column Heading' . $enc1 . $delimiter. PHP_EOL ); 

फिर जब आपको कुछ लिखने की आवश्यकता होती है – जैसे HTML जिसमें "आप ऐसा कर सकते हैं"

 fwrite($fp2, $enc2 . $myhtmlstring . $enc2 . $delimiter); 

नई लाइनें समाप्त होती हैं . PHP_EOL

स्क्रिप्ट का अंत एक लिंक प्रिंट करता है ताकि उपयोगकर्ता फाइल को डाउनलोड कर सके।

 echo 'Click <a href="myfile.csv">here</a> to download file'; 

आम तौर पर एक नई पंक्ति "\ r \ n" है। मेरे सीएसवी में, मैंने खाली मूल्य के साथ "\ r" रखा यहां जावास्क्रिप्ट में कोड है:

 cellValue = cellValue.replace(/\r/g, "") 

जब मैं एमएस एक्सेल में सीएसवी खोलता हूं, तो यह अच्छी तरह से काम करता है अगर मान में एकाधिक पंक्तियाँ हैं, तो यह Excel शीट में 1 एकल कक्ष के अंदर रहेगी।

यह परीक्षण करें: यह मेरे लिए पूरी तरह से कार्य करता है: एक xxxx.csv फ़ाइल में निम्न पंक्तियां रखें

 hola_x,="este es mi text1"&CHAR(10)&"I sigo escribiendo",hola_a hola_y,="este es mi text2"&CHAR(10)&"I sigo escribiendo",hola_b hola_z,="este es mi text3"&CHAR(10)&"I sigo escribiendo",hola_c 

Excel के साथ खोलें

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

और अन्य सुझावों के लिए धन्यवाद, लेकिन उन्होंने मेरे लिए काम नहीं किया मैं एक शुद्ध खिड़कियों में हूँ, और यूनिकोड या अन्य मजेदार चीज़ के साथ खेलना नहीं चाहता था।

इस तरह से आप सीएसवी से एक्सेल करने के लिए फॉर्मूला डालते हैं। यह काम की इस पद्धति के लिए कई उपयोग हो सकते हैं (नोट = उद्धरण से पहले)

पीडी: अपने सुझावों में, डेटा के कुछ नमूनों को न केवल कोड दें।

जावास्क्रिप्ट का उपयोग करने वाला यह एक दिलचस्प तरीका है …

  String.prototype.csv = String.prototype.split.partial(/,\s*/); var results = ("Mugan, Jin, Fuu").csv(); console.log(results[0]=="Mugan" && results[1]=="Jin" && results[2]=="Fuu", "The text values were split properly"); 

आप अगले "\" मान कर सकते हैं Line3 Value3 Line2 \ ""। यह जावा में एक सीएसवी फ़ाइल उत्पन्न करने के लिए मेरे लिए काम करता है

सामग्री में एचटीएमएल न्यूलाइन प्रिंटिंग और एक्सेल में खुलने से किसी भी एक्सेल पर ठीक काम करेगा I