如何通过Javascript生成Excel

有什么办法通过Javascript生成Excel / CSV? (它也应该是浏览器兼容的)

你可以生成任何你喜欢的,但问题是 – 你将如何呈现给用户? 如果您的JS在浏览器中运行,您将无法创build另存为对话框,甚至不能在同一个窗口中打开它。 除非您使用某些ActiveX控件,否则这是一个仅限IE的解决scheme,在开始工作之前,它还会提供一些确认提示。

这个答案不再是真的。 客户端下载现在完全可以使用data: URL,并在所有主stream浏览器中得到很好的支持。 请参阅下面的答案。

github上有一个名为Excel Builder(.js)的有趣项目,它提供了下载Excel xlsx文件的客户端方式,并包含用于格式化Excel电子表格的选项。
stephenliberty/excel-builder.html

您可能会遇到使用此库的浏览器和Excel兼容性问题,但在正确的条件下,它可能会非常有用。

演示似乎有一定的承诺。
http://excelbuilderjs.com/index.html

另一个Github项目,Excel选项较less,但对Excel兼容性问题的担心可以在这里find: ExcellentExport.js
https://github.com/jmaister/excellentexport

如果您使用AngularJS,那么有ng-csv
一个简单的指令,将数组和对象转换为可下载的CSV文件。

如果您可以在服务器上生成Excel文件,那可能是最好的办法。 使用Excel,您可以添加格式并使输出看起来更好。 已经提到了几个Excel选项。 如果你有一个PHP后端,你可能会考虑phpExcel 。

如果你正在尝试在JavaScript中的客户端上做的一切,我不认为Excel是一个选项。 您可以创build一个CSV文件并创build一个数据URL以允许用户下载。

我创build了一个JSFiddle来演示: http : //jsfiddle.net/5KRf6/3/

这个javascript(假设你正在使用jQuery)将从表格中的input框中取出值并构build一个CSV格式的string:

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

如果你愿意,你可以把数据放到页面上的标签(在我的例子中是一个标识为“csv”的标签):

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

您可以使用以下代码生成该文本的url:

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

最后,这将添加一个链接来下载这些数据:

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

创build一个AJAX回发方法,将CSV文件写入您的networking服务器并返回url。在浏览器中将隐藏的IFrame设置为服务器上CSV文件的位置。

您的用户将会看到CSV下载链接。

你应该看看这个

这里是工作示例的链接

 var data1 = [{a:1,b:10},{a:2,b:20}]; var data2 = [{a:100,b:10},{a:200,b:20}]; var opts = [{sheetid:'One',header:true},{sheetid:'Two',header:false}]; var res = alasql('SELECT * INTO XLSX("restest344b.xlsx",?) FROM ?', [opts,[data1,data2]]); 

主要图书馆需要 –

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

用一个实际的例子来回答你的问题:

 <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> 

我build议你生成一个开放格式的XML Excel文件,比CSV更灵活。
阅读在ASP.NET中生成Excel文件以获取更多信息

在我看来,在服务器端做起来要容易得多。 但我想你有你的理由。 此外,作为gmc笔记,放弃Excel,并生成CSV文件。 这对于那些没有安装Excel的用户来说是有用的。