SheetJs 将工作簿转换回数组缓冲区

SheetJs Convert workbook back to arraybuffer

我是 SheetJs 的新手。我们的内部平台中有这个远程 excel 文件,只能使用 API 访问。我必须阅读此 Excel 文件并更新 excel 内容并使用 API 上传 excel 文件更改。我使用的内部平台 API 接受 blob 作为输入并更新原始 excel。 这里的问题是一旦我从 XLSX 读取 ArrayBuffer 并更新工作簿对象,我如何将此工作簿转换回 ArrayBuffer 以便 API 接受它?

oReq.onload = function (e) {
 const arraybuffer = oReq.response; //Excel ArrayBuffer retrieved using Platform API
 let data = "";
 const bytes = new Uint8Array(arraybuffer);
 for (let i = 0; i < bytes.byteLength; i++) {
    data += String.fromCharCode(bytes[i]);
 }

 var workbook= XLSX.read(data, {
    type: 'binary'
 });

 //I Update the workbook contents here
 //How to convert workbook back to ArrayBuffer?
}

经过更多挖掘,我终于找到了答案here

var out= XLSX.write(wb, {bookType:'xlsx',  type: 'binary'});
let blob = new Blob([s2ab(out)],{type:"application/octet-stream"});


//s2ab method
function s2ab(s) { 
                var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
                var view = new Uint8Array(buf);  //create uint8array as viewer
                for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
                return buf;    
}