如何通过Javascript生成Excel

Chi*_*may 58 javascript excel

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

mg1*_*075 46

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

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

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

另一个github项目具有较少的Excel选项,但对Excel兼容性问题的担忧较少,可在此处找到:ExcellentExport.js
https://github.com/jmaister/excellentexport

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

  • 2015年,有更多的库,如[ng-xlsx](https://libraries.io/bower/angular-xlsx)和[js-xlsx](https://libraries.io/bower/js-xlsx) (8认同)
  • 在2016年底有一个非常好的库https://github.com/guyonroche/exceljs(我试过Excel Builder但是在你试图保存你的文件时确实存在问题) (5认同)
  • 不再维护Excel Builder(.js).随着网站的关闭,也没有相关的文档. (3认同)

dig*_*gle 31

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

如果你试图用javascript在客户端上做所有事情,我不认为Excel是一个选项.您可以创建CSV文件并创建数据URL以允许用户下载它.

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

这个javascript(假设您正在使用jQuery)将从表中的输入框中取出值并构建CSV格式的字符串:

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

如果您愿意,可以将数据放入页面上的标签中(在我的例子中是id为"csv"的标签):

$("#csv").text(csv);
Run Code Online (Sandbox Code Playgroud)

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

window.URL = window.URL || window.webkiURL;
var blob = new Blob([csv]);
var blobURL = window.URL.createObjectURL(blob);
Run Code Online (Sandbox Code Playgroud)

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

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


Suj*_*ngh 9

类似的答案贴在这里.

链接工作示例

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]]);
Run Code Online (Sandbox Code Playgroud)

需要主要图书馆 -

<script src="http://alasql.org/console/alasql.min.js"></script> 
<script src="http://alasql.org/console/xlsx.core.min.js"></script> 
Run Code Online (Sandbox Code Playgroud)


小智 2

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

然后,您的用户将看到 CSV 下载链接。

  • 不过有点傻——将数据传递回服务器,以便服务器可以将其直接返回给用户。此外,生成的 XLS 可能相当大。(也许这就是作者想要在客户端生成它的原因?)也许在服务器端也生成 XLS 更好? (4认同)