如何使用javascript存储Excel文件

How to store Excel file using javascript

本文关键字:Excel 文件 存储 javascript 何使用      更新时间:2023-09-26

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

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 调用并通过标头使用令牌身份验证,因此简单地使用 URL 并执行 window.open(url( 是行不通的,因为您将无权执行该请求。我尝试了$resource和$http但两者都有相同的结果。REST API 的工作原理是,当我公开 URL (无需身份验证(并直接使用浏览器转到 URL 时,它会正确下载文件,我可以打开它。因此,当我创建 Blob 时,看起来出了点问题。

有人知道如何解决这个问题吗?

这是我

目前使用的:

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);
        }
    }
}