SheetJS большой Excel файл для чтения - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь загрузить большой файл 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?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...