vue read parser array javascript export-to-csv

parser - read csv javascript



Javascript/jQuery: exportar datos en CSV no funciona en IE (6)

Necesito exportar datos mostrados en una tabla a formato CSV. He probado muchas cosas pero no pude hacer que funcionara para IE 9 y superior.

He creado un violín ficticio con mi código.

var data = [ ["name1", "city1", "some other info"], ["name2", "city2", "more info"] ];//Some dummy data var csv = ConvertToCSV(data);//Convert it to CSV format var fileName = "test";//Name the file- which will be dynamic if (navigator.userAgent.search("MSIE") >= 0) { //This peice of code is not working in IE, we will working on this //TODO var uriContent = "data:application/octet-stream;filename=" + fileName + ''.csv'' + "," + escape(csv); window.open(uriContent + fileName + ''.csv''); } else { var uri = ''data:text/csv;charset=utf-8,'' + escape(csv); var downloadLink = document.createElement("a"); downloadLink.href = uri; downloadLink.download = fileName + ".csv"; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }

He visto muchos de los enlaces en Stackoverflow, pero no pude encontrar nada que funcione con IE9 o superior. Like @ Terry Young explica en cómo-exportar-a-csv-using-jquery-or-javascript.

Además, intentó-

var csv = ConvertToCSV(_tempObj); var fileName = csvExportFileName(); if (navigator.appName != ''Microsoft Internet Explorer'') { window.open(''data:text/csv;charset=utf-8,'' + escape(str)); } else { var popup = window.open('''', ''csv'', ''''); popup.document.body.innerHTML = ''<pre>'' + str + ''</pre>''; }

No estoy seguro de cómo repararlo. No quiero golpear el servidor y exportar mi CSV (el requisito lo dice).


Conseguí la solución que es compatible con IE 8+ para mí. Necesitamos especificar el separador como se muestra abajo.

if (navigator.appName == "Microsoft Internet Explorer") { var oWin = window.open(); oWin.document.write(''sep=,/r/n'' + CSV); oWin.document.close(); oWin.document.execCommand(''SaveAs'', true, fileName + ".csv"); oWin.close(); }

Puede ir a través del enlace http://andrew-b.com/view/article/44


Después de usar Javascript resolverá su problema.

Usa esto para IE,

var IEwindow = window.open(); IEwindow.document.write(''sep=,/r/n'' + CSV); IEwindow.document.close(); IEwindow.document.execCommand(''SaveAs'', true, fileName + ".csv"); IEwindow.close();

Para obtener más información, he escrito un tutorial sobre eso, consulte - Descargar datos JSON en formato CSV. Compatibilidad con varios navegadores

Espero que esto te sea de utilidad.


Esta es también una de las respuestas que utilicé y que funciona bien para las versiones de IE 10+:

var csv = JSON2CSV(json_obj); var blob = new Blob([csv],{type: "text/csv;charset=utf-8;"}); if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, "fileName.csv") } 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.csv"); link.style = "visibility:hidden"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } }

Espero que esto ayude.


Esto funcionará en cualquier navegador, sin la necesidad de jQuery.

  1. Agregue el siguiente iframe en cualquier lugar de su página:

    <iframe id="CsvExpFrame" style="display: none"></iframe>

  2. Dale un id a la tabla en la página que quieres exportar:

    <table id="dataTable">

  3. Personalice su enlace o botón para llamar a la función ExportToCsv, pasando el nombre de archivo predeterminado y el ID de la tabla como parámetros. Por ejemplo:

    <input type="button" onclick="ExportToCsv(''DefaultFileName'',''dataTable'')"/>

  4. Agregue esto a su archivo o sección de JavaScript:

function ExportToCsv(fileName, tableName) { var data = GetCellValues(tableName); var csv = ConvertToCsv(data); if (navigator.userAgent.search("Trident") >= 0) { window.CsvExpFrame.document.open("text/html", "replace"); window.CsvExpFrame.document.write(csv); window.CsvExpFrame.document.close(); window.CsvExpFrame.focus(); window.CsvExpFrame.document.execCommand(''SaveAs'', true, fileName + ".csv"); } else { var uri = "data:text/csv;charset=utf-8," + escape(csv); var downloadLink = document.createElement("a"); downloadLink.href = uri; downloadLink.download = fileName + ".csv"; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); } }; function GetCellValues(tableName) { var table = document.getElementById(tableName); var tableArray = []; for (var r = 0, n = table.rows.length; r < n; r++) { tableArray[r] = []; for (var c = 0, m = table.rows[r].cells.length; c < m; c++) { var text = table.rows[r].cells[c].textContent || table.rows[r].cells[c].innerText; tableArray[r][c] = text.trim(); } } return tableArray; } function ConvertToCsv(objArray) { var array = typeof objArray != "object" ? JSON.parse(objArray) : objArray; var str = "sep=,/r/n"; var line = ""; var index; var value; for (var i = 0; i < array.length; i++) { line = ""; var array1 = array[i]; for (index in array1) { if (array1.hasOwnProperty(index)) { value = array1[index] + ""; line += "/"" + value.replace(/"/g, "/"/"") + "/","; } } line = line.slice(0, -1); str += line + "/r/n"; } return str; };

<table id="dataTable"> <tr> <th>Name</th> <th>Age</th> <th>Email</th> </tr> <tr> <td>Andrew</td> <td>20</td> <td>[email protected]</td> </tr> <tr> <td>Bob</td> <td>32</td> <td>[email protected]</td> </tr> <tr> <td>Sarah</td> <td>19</td> <td>[email protected]</td> </tr> <tr> <td>Anne</td> <td>25</td> <td>[email protected]</td> </tr> </table> <a href="#" onclick="ExportToCsv(''DefaultFileName'', ''dataTable'');return true;">Click this to download a .csv</a>


Para IE 10+ puedes hacer:

var a = document.createElement(''a''); if(window.navigator.msSaveOrOpenBlob){ var fileData = str; blobObject = new Blob([str]); a.onclick=function(){ window.navigator.msSaveOrOpenBlob(blobObject, ''MyFile.csv''); } } a.appendChild(document.createTextNode(''Click to Download'')); document.body.appendChild(a);

No creo que sea posible en versiones anteriores de IE. Sin invocar el objeto activeX, pero si eso es aceptable, puedes usar:

var sfo=new ActiveXObject(''scripting.FileSystemObject''); var fLoc=sfo.CreateTextFile(''MyFile.csv''); fLoc.WriteLine(str); fLoc.close();

Lo que escribiría el archivo directamente en el sistema de archivos del usuario. Sin embargo, esto generalmente le pedirá al usuario que pregunte si desea permitir que se ejecute el script. El indicador se puede deshabilitar en un entorno de intranet.


usar objeto Blob Crear un objeto blob y usar msSaveBlob o msSaveOrOpenBlob El código funciona en IE11 (no se ha probado para otros navegadores)

<script> var csvString =''csv,object,file''; var blobObject = new Blob(csvString); window.navigator.msSaveBlob(blobObject, ''msSaveBlob_testFile.txt''); // The user only has the option of clicking the Save button. alert(''note the single "Save" button below.''); var fileData = ["Data to be written in file."]; //csv string object inside "[]" blobObject = new Blob(fileData); window.navigator.msSaveOrOpenBlob(blobObject, ''msSaveBlobOrOpenBlob_testFile.txt''); // Now the user will have the option of clicking the Save button and the Open button.`enter code here` alert(''File save request made using msSaveOrOpenBlob() - note the two "Open" and "Save" buttons below.''); </script>