如何使用JavaScript存储Excel文件

我一直在尝试使用Javascript存储Excel文件,但是我无法在所有浏览器上使用它。 我使用的第一种技术是BASE64与数据URL结合使用。 这在Chrome和Firefox中运行正常,但IE浏览器不支持这种技术。

newlink = document.createElement('a'); newlink.setAttribute('href', 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + response.data); newlink.setAttribute('download', 'test.xlsx'); newlink.click(); 

我也尝试了Blob的东西..但是,这似乎不能正常使用像PDF,Excel和MS Word的二进制文件。

 var report = response; var str = atob(report.data); var blob = new Blob([str], { type: report.type}); saveAs(blob, 'report.csv'); 

这工作正常的CSV文件,但是当我用Excel或Word做同样的事情文件已损坏。

我正在使用AngularJS进行REST调用,并通过标头使用令牌authentication,所以只需使用一个URL,并做window.open(url)将无法正常工作,因为您将无权执行该请求。 我试过$资源和$ http,但两者都有相同的结果。 REST API的工作原理是,当我把URL公开(不需要authentication),并直接到我的浏览器的URL,它正确地下载文件,我可以打开它。 所以当我创buildBlob时看起来有些问题。

有没有人有一个想法如何解决这个问题?

这是我目前使用的:

arr是你想要转换成csv的数组。 在IE / Chrome上为我工作。

 exportToCsv("export.csv",arr); function exportToCsv(filename, rows) { var processRow = function (row) { var finalVal = ''; for (var j = 0; j < row.length; j++) { var innerValue = row[j] === null ? '' : row[j].toString(); if (row[j] instanceof Date) { innerValue = row[j].toLocaleString(); }; var result = innerValue.replace(/"/g, '""'); if (result.search(/("|,|\n)/g) >= 0) result = '"' + result + '"'; if (j > 0) finalVal += ','; finalVal += result; } return finalVal + '\n'; }; var csvFile = ''; for (var i = 0; i < rows.length; i++) { csvFile += processRow(rows[i]); } var blob = new Blob([csvFile], { type: 'text/csv;charset=utf-8;' }); if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, filename); } 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); link.style = "visibility:hidden"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } }