我的 javascript 应用程序中有一个 ArrayBuffer(一个 excel 文件),我需要在单击按钮时将其作为可下载的 excel 文件提供。我使用 excel4node 库生成了 Arraybuffer。我尝试了以下方法:
let element = document.createElement('a');
let excelBuffer = await fetchService.getBuffer();
let excelString = String.fromCharCode(...excelBuffer.data);
console.log(excelString);
element.setAttribute('href', 'application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelString));
element.setAttribute('download', 'dataFile.xlsx');
element.style.display = 'none';
shadowRoot.appendChild(element);
element.click();
shadowRoot.removeChild(element);
此代码在单击按钮时执行。但这似乎不起作用。我要么收到格式错误的 URI 错误,要么浏览器尝试打开一个新的 url,上面写着“应用程序/阻止”。使用 String.fromCharCode 记录转换后的 excelString 会记录一些奇怪的符号。我知道这种方法使用 UTF-16 编码进行转换,但 ArrayBuffer 似乎是 utf-8 编码的。我也试过这个没用:
var blob = new Blob([excelBuffer.data], {type: "application/vnd.ms-excel"});
element.setAttribute('href', 'application/vnd.ms-excel;charset=utf-8,' + blob);
element.setAttribute('download','dataFile.xlsx');
我该如何进行这项工作?