Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using javascript to download file as a.csv file

Tags:

javascript

csv

Hi I am trying to export a file as .csv file, so that when the user clicks on the download button, the browser would automatically download the file as .csv. I also want to be able to set a name for the .csv file to be exported

I am using javascript to do this

Code is below:

 function ConvertToCSV(objArray) {             var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;             var str = '';              for (var i = 0; i < array.length; i++) {                 var line = '';             for (var index in array[i]) {                 if (line != '') line += ','                  line += array[i][index];             }              str += line + '\r\n';         }          return str;     }      // Example     $(document).ready(function () {          // Create Object         var items = [               { "name": "Item 1", "color": "Green", "size": "X-Large" },               { "name": "Item 2", "color": "Green", "size": "X-Large" },               { "name": "Item 3", "color": "Green", "size": "X-Large" }];          // Convert Object to JSON         var jsonObject = JSON.stringify(items);          // Display JSON         $('#json').text(jsonObject);          // Convert JSON to CSV & Display CSV         $('#csv').text(ConvertToCSV(jsonObject));          $("#download").click(function() {             alert("2");             var csv = ConvertToCSV(jsonObject);             window.open("data:text/csv;charset=utf-8," + escape(csv))             ///////           });      }); 

Please advise on this My Boss is breathing down my neck on this issue

Please help

like image 966
Samuel Tang Avatar asked Jul 10 '13 06:07

Samuel Tang


People also ask

How do I download a CSV file from JavaScript?

join("\n"); Then you can use JavaScript's window. open and encodeURI functions to download the CSV file like so: var encodedUri = encodeURI(csvContent); window.

How do I download as a CSV file?

Go to File > Save As. Click Browse. In the Save As dialog box, under Save as type box, choose the text file format for the worksheet; for example, click Text (Tab delimited) or CSV (Comma delimited). Note: The different formats support different feature sets.

How do I download a file using JavaScript?

To ask the browser to download a file it can render, use the following header: Content-Disposition: attachment; filename="downloaded. pdf" (you can of course customize the filename as you need).


2 Answers

I have written a solution in this thread: how to set a file name using window.open

This is the simple solution:

 $("#download_1").click(function() { var json_pre = '[{"Id":1,"UserName":"Sam Smith"},{"Id":2,"UserName":"Fred Frankly"},{"Id":1,"UserName":"Zachary Zupers"}]'; var json = $.parseJSON(json_pre);  var csv = JSON2CSV(json); var downloadLink = document.createElement("a"); var blob = new Blob(["\ufeff", csv]); var url = URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = "data.csv";  document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }); 

JSON2CSV function

function JSON2CSV(objArray) {     var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;     var str = '';     var line = '';      if ($("#labels").is(':checked')) {         var head = array[0];         if ($("#quote").is(':checked')) {             for (var index in array[0]) {                 var value = index + "";                 line += '"' + value.replace(/"/g, '""') + '",';             }         } else {             for (var index in array[0]) {                 line += index + ',';             }         }          line = line.slice(0, -1);         str += line + '\r\n';     }      for (var i = 0; i < array.length; i++) {         var line = '';          if ($("#quote").is(':checked')) {             for (var index in array[i]) {                 var value = array[i][index] + "";                 line += '"' + value.replace(/"/g, '""') + '",';             }         } else {             for (var index in array[i]) {                 line += array[i][index] + ',';             }         }          line = line.slice(0, -1);         str += line + '\r\n';     }     return str; } 
like image 157
Jewel Avatar answered Sep 19 '22 12:09

Jewel


in modern browsers there is a new attribute in anchors.

download

http://caniuse.com/download

so instead of using

window.open("data:text/csv;charset=utf-8," + escape(csv)) 

create a download link:

<a href="data:text/csv;charset=utf-8,'+escape(csv)+'" download="filename.csv">download</a> 

another solution is to use php

EDIT

i don't use jQuery, but you need to edit your code to add the download link with something like that in your function.

var csv=ConvertToCSV(jsonObject), a=document.createElement('a'); a.textContent='download'; a.download="myFileName.csv"; a.href='data:text/csv;charset=utf-8,'+escape(csv); document.body.appendChild(a); 
like image 29
cocco Avatar answered Sep 18 '22 12:09

cocco