दिलचस्प पोस्ट
सेनर्स और अस्थिर वस्तुओं के साथ शब्दकोश निर्माण। आश्चर्यजनक प्रणाली का रूपांतरण। अर्रे सूची में मैं बेस 64 एन्कोडेड स्ट्रिंग को कैसे डीकोड कर सकता हूं? LINQ की सूची में आइटम ढूंढें? डीबग मोड में दो बार आरंभ करने से फ्लास्क को कैसे रोकें? जावास्क्रिप्ट का उपयोग करके ब्राउजर बैक बटन को कैसे रोकें मैक ओएस 10.9 पर 2 एनाकोंडा (पायथन 2.7 और 3.4) को कैसे स्थापित करें जटिल पासवर्ड लागू करने के लिए नियमित अभिव्यक्ति, 4 नियमों में से 3 से मेल खाती है मैं कैसे एक पर्ल स्ट्रिंग में स्ट्रिंग पलायन मैन्युअल रूप से interpolate कर सकते हैं? टेम्पलेट्स में एक त्रिगुट android.content.ActivityNotFoundException: सभी खुली खिड़कियों के शीर्षक प्राप्त करें क्या अभी भी क्यू या ब्लूबर्ड जैसे वायर्ड लाइब्रेरी का उपयोग करने के कारण अब हमारे पास ईएस 6 वादे हैं? मुझे एंड्रॉइड में छवियों को गोलाकार किनारे कैसे देना चाहिए? मैं तत्वों फ्लोट कैसे करूँ?

जावास्क्रिप्ट अरै जानकारी को सीएसवी (क्लाइंट साइड पर) कैसे निर्यात करें?

मुझे पता है कि इस प्रकृति के बहुत सारे सवाल हैं लेकिन मुझे यह जावास्क्रिप्ट का उपयोग करने की ज़रूरत है। मैं Dojo 1.8 का उपयोग कर रहा हूँ और सरणी में सभी विशेषता जानकारी है, जो इस तरह दिखता है:

 [["name1", "city_name1", ...]["name2", "city_name2", ...]] 

किसी भी विचार से मैं ग्राहक पक्ष पर CSV को कैसे निर्यात कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट अरै जानकारी को सीएसवी (क्लाइंट साइड पर) कैसे निर्यात करें?"

आप मूल जावास्क्रिप्ट में ऐसा कर सकते हैं। आपको अपने डेटा को सही सीएसवी प्रारूप में पार्स करना पड़ेगा (ऐसा मानते हुए कि आप अपने डेटा के लिए सरणी का प्रयोग कर रहे हैं, जैसा कि आपने सवाल में वर्णित किया है):

 const rows = [["name1", "city1", "some other info"], ["name2", "city2", "more info"]]; let csvContent = "data:text/csv;charset=utf-8,"; rows.forEach(function(rowArray){ let row = rowArray.join(","); csvContent += row + "\r\n"; // add carriage return }); 

फिर आप जावास्क्रिप्ट की window.open का उपयोग कर सकते हैं। window.open और encodeURI फ़ंक्शंस इस तरह सीएसवी फ़ाइल डाउनलोड करने के लिए:

 var encodedUri = encodeURI(csvContent); window.open(encodedUri); 

संपादित करें:

यदि आप अपनी फ़ाइल को एक विशिष्ट नाम देना चाहते हैं, तो आपको कुछ अलग तरीके से करना होगा क्योंकि यह window.openwindow.open विधि का उपयोग करके डेटा यूआरआर तक पहुंचने में window.open है। इसे प्राप्त करने के लिए, आप एक छुपी हुई <a> डोम नोड बना सकते हैं और इसके download विशेषता को निम्नानुसार सेट कर सकते हैं:

 var encodedUri = encodeURI(csvContent); var link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "my_data.csv"); document.body.appendChild(link); // Required for FF link.click(); // This will download the data file named "my_data.csv". 

ऊपर दिए गए उत्तरों के आधार पर मैंने इस फ़ंक्शन को बनाया है जिसे मैंने आईई 11, क्रोम 36 और फ़ायरफ़ॉक्स 29 पर परीक्षण किया है

 function exportToCsv(filename, rows) { var processRow = function (row) { var finalVal = ''; for (var j = 0; j < row.length; j++) { var innerValue = row[j] === null ? '' : row[j].toString(); if (row[j] instanceof Date) { innerValue = row[j].toLocaleString(); }; var result = innerValue.replace(/"/g, '""'); if (result.search(/("|,|\n)/g) >= 0) result = '"' + result + '"'; if (j > 0) finalVal += ','; finalVal += result; } return finalVal + '\n'; }; var csvFile = ''; for (var i = 0; i < rows.length; i++) { csvFile += processRow(rows[i]); } var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' }); if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, filename); } else { var link = document.createElement("a"); if (link.download !== undefined) { // feature detection // Browsers that support HTML5 download attribute var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", filename); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } } 

उदाहरण के लिए: https://jsfiddle.net/jossef/m3rrLzk0/

यह समाधान इंटरनेट एक्सप्लोरर 10+, एज, पुराने और क्रोम, फ़ायरफ़ॉक्स, सफारी, ++ के नए संस्करणों के साथ काम करना चाहिए

स्वीकृत जवाब IE और सफारी के साथ काम नहीं करेगा।

 // Example data given in question text var data = [ ['name1', 'city1', 'some other info'], ['name2', 'city2', 'more info'] ]; // Building the CSV from the Data two-dimensional array // Each column is separated by ";" and new line "\n" for next row var csvContent = ''; data.forEach(function(infoArray, index) { dataString = infoArray.join(';'); csvContent += index < data.length ? dataString + '\n' : dataString; }); // The download function takes a CSV string, the filename and mimeType as parameters // Scroll/look down at the bottom of this snippet to see how download is called var download = function(content, fileName, mimeType) { var a = document.createElement('a'); mimeType = mimeType || 'application/octet-stream'; if (navigator.msSaveBlob) { // IE10 navigator.msSaveBlob(new Blob([content], { type: mimeType }), fileName); } else if (URL && 'download' in a) { //html5 A[download] a.href = URL.createObjectURL(new Blob([content], { type: mimeType })); a.setAttribute('download', fileName); document.body.appendChild(a); a.click(); document.body.removeChild(a); } else { location.href = 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported } } download(csvContent, 'dowload.csv', 'text/csv;encoding:utf-8'); 

मैं यहाँ थोड़ी अधिक आरएफसी 4180 अनुपालन की तलाश में आया था और मैं एक कार्यान्वयन खोजने में विफल रहा, इसलिए मैंने अपनी आवश्यकताओं के लिए (संभवत: अक्षम) बनाया। मैंने सोचा कि मैं इसे सभी के साथ साझा करूँगा

 var content = [['1st title', '2nd title', '3rd title', 'another title'], ['aa a', 'bb\nb', 'cc,c', 'dd"d'], ['www', 'xxx', 'yyy', 'zzz']]; var finalVal = ''; for (var i = 0; i < content.length; i++) { var value = content[i]; for (var j = 0; j < value.length; j++) { var innerValue = value[j]===null?'':value[j].toString(); var result = innerValue.replace(/"/g, '""'); if (result.search(/("|,|\n)/g) >= 0) result = '"' + result + '"'; if (j > 0) finalVal += ','; finalVal += result; } finalVal += '\n'; } console.log(finalVal); var download = document.getElementById('download'); download.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(finalVal)); download.setAttribute('download', 'test.csv'); 

उम्मीद है कि इससे भविष्य में किसी को मदद मिलेगी। यह फाइल को डाउनलोड करने की क्षमता के साथ सीएसवी की दोनों एन्कोडिंग को जोड़ती है। मेरे उदाहरण में jsfiddle पर आप फ़ाइल को डाउनलोड कर सकते हैं (एचटीएमएल 5 ब्राउज़र मानते हुए) या कंसोल में आउटपुट को देख सकते हैं।

अद्यतन करें:

क्रोम अब फ़ाइल नाम करने की क्षमता खो गया है। मुझे यकीन नहीं है कि क्या हुआ है या इसे ठीक कैसे किया जाए, लेकिन जब भी मैं इस कोड का उपयोग करता हूं (जेएसफ़िल्ड सहित), डाउनलोड की गई फ़ाइल को अब डाउनलोड किया गया है csv।

@ डिफॉल्ट का समाधान क्रोम पर बिल्कुल सही काम करता है (इसके लिए बहुत कुछ धन्यवाद!) लेकिन मुझे IE के साथ एक समस्या थी

यहां एक समाधान है (IE10 पर काम करता है):

 var csvContent=data; //here we load our csv data var blob = new Blob([csvContent],{ type: "text/csv;charset=utf-8;" }); navigator.msSaveBlob(blob, "filename.csv") 

क्रोम 35 अपडेट में, विशेषता व्यवहार को डाउनलोड किया गया था।

https://code.google.com/p/chromium/issues/detail?id=373182

क्रोम में यह काम करने के लिए, इसका उपयोग करें

 var pom = document.createElement('a'); var csvContent=csv; //here we load our csv data var blob = new Blob([csvContent],{type: 'text/csv;charset=utf-8;'}); var url = URL.createObjectURL(blob); pom.href = url; pom.setAttribute('download', 'foo.csv'); pom.click(); 

तुम वहाँ जाओ :

 <!doctype html> <html> <head></head> <body> <a href='#' onclick='downloadCSV({ filename: "stock-data.csv" });'>Download CSV</a> <script type="text/javascript"> var stockData = [ { Symbol: "AAPL", Company: "Apple Inc.", Price: "132.54" }, { Symbol: "INTC", Company: "Intel Corporation", Price: "33.45" }, { Symbol: "GOOG", Company: "Google Inc", Price: "554.52" }, ]; function convertArrayOfObjectsToCSV(args) { var result, ctr, keys, columnDelimiter, lineDelimiter, data; data = args.data || null; if (data == null || !data.length) { return null; } columnDelimiter = args.columnDelimiter || ','; lineDelimiter = args.lineDelimiter || '\n'; keys = Object.keys(data[0]); result = ''; result += keys.join(columnDelimiter); result += lineDelimiter; data.forEach(function(item) { ctr = 0; keys.forEach(function(key) { if (ctr > 0) result += columnDelimiter; result += item[key]; ctr++; }); result += lineDelimiter; }); return result; } window.downloadCSV = function(args) { var data, filename, link; var csv = convertArrayOfObjectsToCSV({ data: stockData }); if (csv == null) return; filename = args.filename || 'export.csv'; if (!csv.match(/^data:text\/csv/i)) { csv = 'data:text/csv;charset=utf-8,' + csv; } data = encodeURI(csv); link = document.createElement('a'); link.setAttribute('href', data); link.setAttribute('download', filename); link.click(); } </script> </body> </html> 
 //It work in Chrome and IE ... I reviewed and readed a lot of answer. then i used it and tested in both ... var link = document.createElement("a"); if (link.download !== undefined) { // feature detection // Browsers that support HTML5 download attribute var blob = new Blob([CSV], { type: 'text/csv;charset=utf-8;' }); var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", fileName); link.style = "visibility:hidden"; } if (navigator.msSaveBlob) { // IE 10+ link.addEventListener("click", function (event) { var blob = new Blob([CSV], { "type": "text/csv;charset=utf-8;" }); navigator.msSaveBlob(blob, fileName); }, false); } document.body.appendChild(link); link.click(); document.body.removeChild(link); //Regards 

सीएसवी डेटा के साथ एक ब्लॉब बनाएँ। var blob = new Blob([data], type:"text/csv");

यदि ब्राउज़र blobs की बचत का समर्थन करता है यानी if window.navigator.mSaveOrOpenBlob)===true , तो का उपयोग कर सीएसवी डेटा को बचाने: window.navigator.msSaveBlob(blob, 'filename.csv')

यदि ब्राउज़र सहेजना और ब्लॉप्स को खोलने का समर्थन नहीं करता है, तो सीएसवी डेटा को इस रूप में सहेजें:

 var downloadLink = document.createElement('<a></a>'); downloadLink.attr('href', window.URL.createObjectURL(blob)); downloadLink.attr('download', filename); downloadLink.attr('target', '_blank'); document.body.append(downloadLink); 

पूर्ण कोड स्निपेट:

 var filename = 'data_'+(new Date()).getTime()+'.csv'; var charset = "utf-8"; var blob = new Blob([data], { type: "text/csv;charset="+ charset + ";" }); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else { var downloadLink = document.element('<a></a>'); downloadLink.attr('href', window.URL.createObjectURL(blob)); downloadLink.attr('download', filename); downloadLink.attr('target', '_blank'); document.body.append(downloadLink); downloadLink[0].click(); } 

ES6 के साथ एक तीर फ़ंक्शन:

 const dataToCsvURI = (data) => encodeURI( `data:text/csv;charset=utf-8,${data.map((row, index) => row.join(',')).join(`\n`)}` ); 

फिर :

 window.open( dataToCsvURI( [["name1", "city_name1"/*, ...*/], ["name2", "city_name2"/*, ...*/]] ) ); 

अगर किसी को इसकी react-csv जरूरत है, तो react-csv उस के लिए है

यहां दो प्रश्न हैं:

  1. सीएसवी स्ट्रिंग में सरणी कैसे परिवर्तित करें
  2. फ़ाइल को उस स्ट्रिंग को कैसे सहेजना है

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

यहां पर ये मेरा काम करता है:

एक साधारण सीएसवी एक नक्शा () और एक सम्मिलित () पर्याप्त के लिए:

  var test_array = [["name1", 2, 3], ["name2", 4, 5], ["name3", 6, 7], ["name4", 8, 9], ["name5", 10, 11]]; var csv = test_array.map(function(d){ return d.join(); }).join('\n'); /* Results in name1,2,3 name2,4,5 name3,6,7 name4,8,9 name5,10,11 

यह विधि आपको आंतरिक सहभागी में अल्पविराम के अलावा स्तंभ विभाजक को निर्दिष्ट करने की अनुमति भी देता है। उदाहरण के लिए एक टैब: d.join('\t')

दूसरी तरफ अगर आप इसे ठीक से करना चाहते हैं और उद्धरण चिह्नों में स्ट्रिंग्स को जोड़ना चाहते हैं, तो आप कुछ जेसन जादू का उपयोग कर सकते हैं:

 var csv = test_array.map(function(d){ return JSON.stringify(d); }) .join('\n') .replace(/(^\[)|(\]$)/mg, ''); // remove opening [ and closing ] // brackets from each line /* would produce "name1",2,3 "name2",4,5 "name3",6,7 "name4",8,9 "name5",10,11 

अगर आपके पास वस्तुओं की सरणी है:

 var data = [ {"title": "Book title 1", "author": "Name1 Surname1"}, {"title": "Book title 2", "author": "Name2 Surname2"}, {"title": "Book title 3", "author": "Name3 Surname3"}, {"title": "Book title 4", "author": "Name4 Surname4"} ]; // use var csv = data.map(function(d){ return JSON.stringify(Object.values(d)); }) .join('\n') .replace(/(^\[)|(\]$)/mg, ''); 

यहां बताया गया है कि कैसे मैं अपने जावा GWT अनुप्रयोग में क्लाइंट साइड पर CSV फ़ाइलें डाउनलोड करता हूं उनके समाधान के लिए जेवियर जॉन के लिए विशेष धन्यवाद यह एफएफ 24.6.0, आईई 11.0.20, और क्रोम 45.0.2454.99 (64-बिट) में काम करने के लिए सत्यापित किया गया है। मुझे उम्मीद है कि यह किसी को कुछ समय बचाता है:

 public class ExportFile { private static final String CRLF = "\r\n"; public static void exportAsCsv(String filename, List<List<String>> data) { StringBuilder sb = new StringBuilder(); for(List<String> row : data) { for(int i=0; i<row.size(); i++) { if(i>0) sb.append(","); sb.append(row.get(i)); } sb.append(CRLF); } generateCsv(filename, sb.toString()); } private static native void generateCsv(String filename, String text) /*-{ var blob = new Blob([text], { type: 'text/csv;charset=utf-8;' }); if (navigator.msSaveBlob) // IE 10+ { navigator.msSaveBlob(blob, filename); } else { var link = document.createElement("a"); if (link.download !== undefined) // feature detection { // Browsers that support HTML5 download attribute var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", filename); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } }-*/; } 

यहां एक कोणीय अनुकूल संस्करण है:

  constructor(private location: Location, private renderer: Renderer2) {} download(content, fileName, mimeType) { const a = this.renderer.createElement('a'); mimeType = mimeType || 'application/octet-stream'; if (navigator.msSaveBlob) { navigator.msSaveBlob(new Blob([content], { type: mimeType }), fileName); } else if (URL && 'download' in a) { const id = GetUniqueID(); this.renderer.setAttribute(a, 'id', id); this.renderer.setAttribute(a, 'href', URL.createObjectURL(new Blob([content], { type: mimeType }))); this.renderer.setAttribute(a, 'download', fileName); this.renderer.appendChild(document.body, a); const anchor = this.renderer.selectRootElement(`#${id}`); anchor.click(); this.renderer.removeChild(document.body, a); } else { this.location.go(`data:application/octet-stream,${encodeURIComponent(content)}`); } }; 

कार्य के ऊपर उत्तर, लेकिन ध्यान रखें कि यदि आप .xls प्रारूप में खुल रहे हैं, तो स्तंभ ~~ को ~~ को '\t' बजाय ',' के उत्तर से अलग कर सकते हैं, जवाब https://stackoverflow.com/ एक / 14 9 66131/6169225 मेरे लिए अच्छी तरह से काम किया, जब तक मैं इस्तेमाल किया। के बजाय arrays पर .join('\t') .join(',')

अगर किसी को नाकआउट जेएस के लिए इसकी आवश्यकता है, तो यह मूल रूप से प्रस्तावित समाधान के साथ ठीक काम करता है:

एचटीएमएल:

 <a data-bind="attr: {download: filename, href: csvContent}">Download</a> 

मॉडल देखें:

 // for the download link this.filename = ko.computed(function () { return ko.unwrap(this.id) + '.csv'; }, this); this.csvContent = ko.computed(function () { if (!this.csvLink) { var data = ko.unwrap(this.data), ret = 'data:text/csv;charset=utf-8,'; ret += data.map(function (row) { return row.join(','); }).join('\n'); return encodeURI(ret); } }, this); 

मैं जेवियर जोन्स फ़ंक्शंस में शामिल करने के लिए फ़ील्ड शीर्षलेखों को भी शामिल करने के लिए जोड़ा गया, हालांकि यद्यपि jQuery का उपयोग करता है $ .एक सा मूल जावास्क्रिप्ट लूप के लिए बदलने की आवश्यकता होगी

 function exportToCsv(filename, rows, headers = false) { var processRow = function (row) { row = $.map(row, function(value, index) { return [value]; }); var finalVal = ''; for (var j = 0; j < row.length; j++) { if(i == 0 && j == 0 && headers == true){ var ii = 0; $.each(rows[i], function( index, value ) { //console.log(index); var fieldName = index === null ? '' : index.toString(); //console.log(fieldName); var fieldResult = fieldName.replace(/"/g, '""'); //console.log(fieldResult); if (fieldResult.search(/("|,|\n)/g) >= 0){ fieldResult = '"' + fieldResult + '"'; } //console.log(fieldResult); if (ii > 0){ finalVal += ','; finalVal += fieldResult; }else{ finalVal += fieldResult; } ii++; //console.log(finalVal); }); finalVal += '\n'; //console.log('end: '+finalVal); } var innerValue = row[j] === null ? '' : row[j].toString(); if (row[j] instanceof Date) { innerValue = row[j].toLocaleString(); }; var result = innerValue.replace(/"/g, '""'); if (result.search(/("|,|\n)/g) >= 0){ result = '"' + result + '"'; } if (j > 0){ finalVal += ','; finalVal += result; }else{ finalVal += result; } } return finalVal + '\n'; }; var csvFile = ''; for (var i = 0; i < rows.length; i++) { csvFile += processRow(rows[i]); } var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' }); if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, filename); }else{ var link = document.createElement("a"); if (link.download !== undefined) { // feature detection // Browsers that support HTML5 download attribute var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", filename); link.style.visibility = 'hidden'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } } 

यह स्वीकृत उत्तर के आधार पर एक संशोधित उत्तर है जिसमें डेटा JSON से आ जाएगा।

  JSON Data Ouptut: 0 :{emails: "SAMPLE Co., peter@samplecompany.com"}, 1:{emails: "Another CO. , ronald@another.com"} JS: $.getJSON('yourlink_goes_here', { if_you_have_parameters}, function(data) { var csvContent = "data:text/csv;charset=utf-8,"; var dataString = ''; $.each(data, function(k, v) { dataString += v.emails + "\n"; }); csvContent += dataString; var encodedUri = encodeURI(csvContent); var link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "your_filename.csv"); document.body.appendChild(link); // Required for FF link.click(); }); 

सीएसवी को डेटा परिवर्तित करने के लिए यहां बहुत सारे रोल-ऑनर समाधान हैं, परन्तु उन सभी के बारे में उन प्रकार के डेटा के संदर्भ में विभिन्न चेतावनियां होंगी, जो वे Excel या पसंद्स को तेज बिना फंसाएंगे।

कुछ सिद्ध क्यों नहीं करते: पापा पार्स

 Papa.unparse(data[, config]) 

तो बस इसे स्थानीय डाउनलोड समाधानों में से एक के साथ गठबंधन करें जैसे। @ एआरएनएचबी द्वारा एक अच्छा दिखता है

मैं एक string[][] को एक सीएसवी फ़ाइल में कनवर्ट करने के लिए इस फ़ंक्शन का उपयोग करता हूं। यह एक कक्ष उद्धृत करता है, अगर इसमें " , ए , या अन्य रिक्त स्थान (रिक्त स्थान को छोड़कर) शामिल है:

 /** * Takes an array of arrays and returns a `,` sparated csv file. * @param {string[][]} table * @returns {string} */ function toCSV(table) { return table .map(function(row) { return row .map(function(cell) { // We remove blanks and check if the column contains // other whitespace,`,` or `"`. // In that case, we need to quote the column. if (cell.replace(/ /g, '').match(/[\s,"]/)) { return '"' + cell.replace(/"/g, '""') + '"'; } return cell; }) .join(','); }) .join('\n'); // or '\r\n' for windows 

}

नोट : इंटरनेट एक्सप्लोरर पर काम नहीं करता है <11 जब तक कि map पॉलिफ़ल्ड न हो

नोट : अगर कोशिकाओं में संख्याएं होती हैं, तो आप cell=''+cell जोड़ सकते हैं इससे पहले if (cell.replace... संख्याओं को तारों में बदलने के लिए।

या आप इसे एक पंक्ति में ES6 का उपयोग कर लिख सकते हैं:

 t.map(r=>r.map(c=>c.replace(/ /g, '').match(/[\s,"]/)?'"'+c.replace(/"/g,'""')+'"':c).join(',')).join('\n')