我正在尝试将大型excel文件从Angular上传到Django REST。我可以将其很好地上传到Django,但是在上传之前,我想向用户显示电子表格的快照。我为此使用SheetJS。我的代码适用于小文件,但是较大的文件会使浏览器崩溃。我的代码如下:
let excelFile = this.form.get('profile').value;
excelFile.arrayBuffer().then(excelArrayBuffer=>{
let data = new Uint8Array(excelArrayBuffer);
let arr = new Array();
//var enc = new TextDecoder("utf-16");
//let bstr = enc.decode(data);
for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
var bstr = arr.join("");
var workbook = XLSX.read(bstr, {type:"binary"});
var first_sheet_name = workbook.SheetNames[0];
var worksheet = workbook.Sheets[first_sheet_name];
this.rowData = XLSX.utils.sheet_to_json(worksheet, {defval:null});
});
这是导致内存溢出的行:
for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
我尝试了一种使用TextDecoder解码ArrayBuffer的替代方法,如下所示:
var enc = new TextDecoder("utf-8");
let bstr = enc.decode(data);
这引发了错误: 错误:无法在zip中找到文件[Content_Types] .xml
尝试utf-16可以在Excel工作表中创建精彩的亚洲字符!
是否可以使用String.fromCharCode加载大型Excel文件?另外,需要将哪种格式提供给TextDecoder才能成功解码excel ArrayBuffer?
谢谢