Создать массив массивов из программы чтения файлов?

#javascript #arrays

#javascript #массивы

Вопрос:

Мне нужно преобразовать файл Excel с несколькими рабочими таблицами в json, и я нашел следующий скрипт для этого. Однако это просто консоль регистрирует каждый лист, и я хочу, чтобы массив и каждый элемент в массиве были листом. Я пытался инициализировать массив и нажимать oJS на массив каждый раз при forEach запуске, но это не работает: (

 function filePicked(oEvent) {
        // Get The File From The Input
        var oFile = oEvent.target.files[0];
        var sFilename = oFile.name;
        // Create A File Reader HTML5
        var reader = new FileReader();

        // Ready The Event For When A File Gets Selected
        reader.onload = function(e) {
            var data = e.target.result;
            var cfb = XLS.CFB.read(data, {type: 'binary'});
            var wb = XLS.parse_xlscfb(cfb);
            // Loop Over Each Sheet
            wb.SheetNames.forEach(function(sheetName) {
                // Obtain The Current Row As CSV
                var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);   
                var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);   

                $("#my_file_output").html(sCSV);
                console.log(oJS)
            });
        };

        // Tell JS To Start Reading The File.. You could delay this if desired
       fileOut  = reader.readAsBinaryString(oFile);
       console.log(fileOut);
    }
 

Комментарии:

1. Что именно «не работает»? Вы получаете сообщение об ошибке?

2. Извините, я не получаю сообщение об ошибке, но допустим, у меня есть 7 листов в документе Excel. Консоль регистрирует 7 массивов, один за другим. Я хотел бы просто сохранить каждый массив в родительском массиве вместо того, чтобы регистрировать его при каждом запуске цикла.

3. В этом случае вам нужно определить массив вне цикла и вместо (или в дополнение к) протоколированию выходных данных поместить новые данные в массив во внешней области.

4. reader.onload выполняется асинхронно. Вы не можете получить доступ к результату сразу после назначения.

5. @Barmar да, я догадался, сначала выполнив приведенное выше предложение, прежде чем отправлять вопрос. Есть альтернативы?