问题描述
我一直在为用户提供一个 XLSX 文件的 HTML 页面上工作。它运行良好,但在首次下载后,用户会陷入下载循环。
目前我正在使用这些库:Sheetjs 和 Filesaver。
function exportxls(){
var wb = XLSX.utils.book_new();
wb.Props = {
Title: "Test001",Subject: "teste",Author: "Moreira",CreatedDate: new Date(2021,02,01)
};
wb.SheetNames.push("Test Sheet");
var ws_data = [['hello','world']];
var ws = XLSX.utils.aoa_to_sheet(ws_data);
wb.Sheets["Test Sheet"] = ws;
var wbout = XLSX.write(wb,{bookType:'xlsx',type: 'binary'});
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
$("#button-a").click(function(){
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}),'test.xlsx');
});
}
解决方法
这是因为你把$("#button-a").click(function(){...
放在exportxls()
里面,当你调用这个函数的时候,它会把click
事件附加到按钮上。把它移到外面。
function exportxls() {
var wb = XLSX.utils.book_new();
wb.Props = {
Title: "Test001",Subject: "teste",Author: "Moreira",CreatedDate: new Date(2021,02,01)
};
wb.SheetNames.push("Test Sheet");
var ws_data = [
['hello','world']
];
var ws = XLSX.utils.aoa_to_sheet(ws_data);
wb.Sheets["Test Sheet"] = ws;
var wbout = XLSX.write(wb,{
bookType: 'xlsx',type: 'binary'
});
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
saveAs(new Blob([s2ab(wbout)],{
type: "application/octet-stream"
}),'test.xlsx');
}
$("#button-a").click(function () {
exportxls();
});