Excel Addin сбоит, как только он пытается загрузить файл xlsx с 20K строк - PullRequest
0 голосов
/ 28 марта 2020

Я использую Excel Eddin, используя Excel JS API. У меня нет бэкэнд логи c. Все логи c запускаются на клиенте. Я использую версию сообщества Sheet JS для загрузки существующих файлов .xlsx или .csv. Но Addin аварийно завершает работу, например, он перестает отвечать на запросы и автоматически перезапускается, как только я пытаюсь загрузить файл .xlsx с более чем 20К строк или файл .csv с более чем 97К строк. Я ожидаю входные файлы до 100К строк. Я использую следующее на моей html странице

Функция, которая читает данные, является следующей

function excelToJson(file) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();

        reader.onload = function (e) {
            let fileData = null;
            if (!e) {
                fileData = reader.content;
            }
            else {
                fileData = e.target.result;
            }

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

        reader.onerror = function () {
            reject(error);
        };
        // the following is for Internet Explorer Support
        if (!FileReader.prototype.readAsBinaryString) {
            FileReader.prototype.readAsBinaryString = function (fileData) {
                var binary = "";
                var pt = this;
                var reader = new FileReader();
                reader.onload = function (e) {
                    var bytes = new Uint8Array(reader.result);
                    var length = bytes.byteLength;
                    for (var i = 0; i < length; i++) {
                        binary += String.fromCharCode(bytes[i]);
                    }
                    //pt.result  - readonly so assign binary
                    pt.content = binary;
                    $(pt).trigger('onload');
                };
                reader.readAsArrayBuffer(fileData);
            };
        }
        reader.readAsBinaryString(file);
    });

и здесь сработала предыдущая функция

$('input[type="file"]').change(function (e) {

   let file = e.target.files[0];
   let fileName = file.name;
   excelToJson(file).then(function (data) {
      excelFileData = data;
   })
});

Кажется, что она неплохо справляется с CSV-файлами, но, как только я попробую xlsx, произойдет сбой. Я попытался использовать некоторые параметры синтаксического анализа библиотеки Sheet JS в методе read () (https://github.com/sheetjs/sheetjs#parsing -options ), но безуспешно. Мне нужно получить все данные, так как я затем их обрабатываю и добавляю в текущую рабочую книгу. Есть идеи?

...