#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 да, я догадался, сначала выполнив приведенное выше предложение, прежде чем отправлять вопрос. Есть альтернативы?