Я пытаюсь загрузить большой файл 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);
Это выдало ошибку: Ошибка: Не удается найти файл [Content_Types] .xml в zip
При попытке с помощью utf-16 создать замечательные азиатские символы в листе Excel!
Можно ли загружать большие файлы Excel, используя String.fromCharCode? В качестве альтернативы, какой формат необходимо предоставить в TextDecoder для успешного декодирования Excel ArrayBuffer?
Спасибо