有没有办法通过Javascript生成Excel/CSV?(它也应该是浏览器兼容的)
如何使用 JavaScript 导出 Excel 文件?
github 上有一个有趣的项目,称为Excel Builder (.js)
,它提供了一种下载 Excel xlsx文件的客户端方式,并包括格式化 Excel 电子表格的选项。
https://github.com/stephenliberty/excel-builder.js
使用此库时,您可能会遇到浏览器和 Excel 兼容性问题,但在合适的条件下,它可能非常有用。
另一个具有较少 Excel 选项但较少担心 Excel 兼容性问题的 github 项目可以在这里找到:ExcellentExport.js
https://github.com/jmaister/excellentexport
如果您使用的是 AngularJS,则有ng-csv:
“将数组和对象转换为可下载 CSV 文件的简单指令”。
如果您可以在服务器上生成 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";
});
如果您愿意,您可以将数据放入页面上的一个标签中(在我的例子中是一个 ID 为“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');
类似的答案张贴在这里。
工作示例链接
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]]);
需要的主要库 -
<script src="http://alasql.org/console/alasql.min.js"></script>
<script src="http://alasql.org/console/xlsx.core.min.js"></script>
创建一个 AJAX 回发方法,该方法将 CSV 文件写入您的网络服务器并返回 url.. 在浏览器中将隐藏的 IFrame 设置为服务器上 CSV 文件的位置。
然后,您的用户将看到 CSV 下载链接。
用一个工作示例回答你的问题:
<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>