已读取SheetJS大型Excel文件

时间:2019-10-30 11:12:49

标签: javascript json excel angular

我正在尝试将大型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?

谢谢

0 个答案:

没有答案