tutorial tabla sheetjs manejo leer importar exportar contenido archivos archivo javascript excel

tabla - cómo generar Excel a través de Javascript



manejo de archivos en javascript (7)

Cree un método de devolución de datos AJAX que escriba un archivo CSV en su servidor web y devuelva la url .. Establezca un IFrame oculto en el navegador a la ubicación del archivo CSV en el servidor.

A su usuario se le presentará el enlace de descarga de CSV.

¿Hay alguna manera de generar Excel / CSV a través de Javascript? (También debe ser compatible con el navegador)


Hay un proyecto interesante en github llamado Excel Builder (.js) que ofrece una forma de descargar archivos Excel xlsx del lado del cliente e incluye opciones para formatear la hoja de cálculo de Excel.
https://github.com/stephenliberty/excel-builder.js

Puede encontrar problemas de compatibilidad tanto con el navegador como con Excel utilizando esta biblioteca, pero en las condiciones adecuadas, puede ser bastante útil.

Los demos parecen tener alguna promesa.
http://excelbuilderjs.com/index.html

Otro proyecto de Github con menos opciones de Excel pero menos preocupaciones sobre problemas de compatibilidad con Excel se puede encontrar aquí: ExcellentExport.js
https://github.com/jmaister/excellentexport

Si está utilizando AngularJS, hay ng-csv :
una "directiva simple que convierte matrices y objetos en archivos CSV descargables".


Me parece mucho más fácil de hacer en el lado del servidor. Pero supongo que tienes tus razones. Además, como notas gmc, suelte Excel y genere archivos CSV en su lugar. Esto tiene la ventaja adicional de ser útil para aquellos usuarios que no tienen Excel instalado.


Para responder a su pregunta con un ejemplo de trabajo:

<script type="text/javascript"> function DownloadJSON2CSV(objArray) { var array = typeof objArray != ''object'' ? JSON.parse(objArray) : objArray; var str = ''''; for (var i = 0; i < array.length; i++) { var line = new Array(); for (var index in array[i]) { line.push(''"'' + array[i][index] + ''"''); } str += line.join('';''); str += ''/r/n''; } window.open( "data:text/csv;charset=utf-8," + encodeURIComponent(str)); } </script>


Respuesta similar publicada here .

Enlace para ejemplo de trabajo

var sheet_1_data = [{Col_One:1, Col_Two:11}, {Col_One:2, Col_Two:22}]; var sheet_2_data = [{Col_One:10, Col_Two:110}, {Col_One:20, Col_Two:220}]; var opts = [{sheetid:''Sheet One'',header:true},{sheetid:''Sheet Two'',header:false}]; var result = alasql(''SELECT * INTO XLSX("sample_file.xlsx",?) FROM ?'', [opts,[sheet_1_data ,sheet_2_data]]);

Bibliotecas principales requeridas -

<script src="http://alasql.org/console/alasql.min.js"></script> <script src="http://alasql.org/console/xlsx.core.min.js"></script>


Si puede generar el archivo de Excel en el servidor, esa es probablemente la mejor manera. Con Excel puede agregar formato y obtener la salida para que se vea mejor. Varias opciones de Excel ya han sido mencionadas. Si tiene un backend PHP, puede considerar phpExcel .

Si intentas hacer todo en el cliente en javascript, no creo que Excel sea una opción. Puede crear un archivo CSV y crear una URL de datos para permitir que el usuario la descargue.

Creé un JSFiddle para demostrar: http://jsfiddle.net/5KRf6/3/

Este javascript (suponiendo que esté utilizando jQuery) eliminará los valores de los cuadros de entrada en una tabla y creará una cadena con formato CSV:

var csv = ""; $("table").find("tr").each(function () { var sep = ""; $(this).find("input").each(function () { csv += sep + $(this).val(); sep = ","; }); csv += "/n"; });

Si lo desea, puede soltar los datos en una etiqueta en la página (en mi caso una etiqueta con una identificación de "csv"):

$("#csv").text(csv);

Puede generar una URL para ese texto con este código:

window.URL = window.URL || window.webkiURL; var blob = new Blob([csv]); var blobURL = window.URL.createObjectURL(blob);

Finalmente, esto agregará un enlace para descargar esa información:

$("#downloadLink").html(""); $("<a></a>"). attr("href", blobURL). attr("download", "data.csv"). text("Download Data"). appendTo(''#downloadLink'');