¿Crear una serie de arrays del lector de archivos?
Necesito convertir un archivo de Excel con múltiples hojas de trabajo a json, y encontré el siguiente script para hacerlo. Sin embargo sólo consola registros cada hoja y quiero una manera de tener un array y cada elemento en el array ser una hoja. He intentado inicializar un array y empujar oJS
a la matriz cada vez que forEach
funciona pero no funciona :(
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);
}
Pregunta hecha hace 3 años, 5 meses, 6 días - Por binarybuilder
2 Respuestas:
-
Para guardar los datos de cada hoja en un array y luego mostrar este array en la consola, puedes modificar tu código de la siguiente manera:
javascript 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(); var sheetArray = []; // Array para almacenar las hojas // 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]); sheetArray.push(oJS); // Agregar el objeto de la hoja al array $("
my_file_output").html(sCSV); console.log(oJS); }); console.log(sheetArray); // Mostrar el array completo en la consola }; // Tell JS To Start Reading The File.. You could delay this if desired fileOut += reader.readAsBinaryString(oFile); console.log(fileOut); }Con este código, cada vez que se recorra una hoja del archivo Excel, se almacenará el objeto correspondiente en el array
sheetArray
. Finalmente, al finalizar el proceso de lectura del archivo, se mostrará este array completo en la consola.Respondida el Dec 17, 2020 a las 16:22 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para crear una matriz de objetos JSON, uno para cada hoja de trabajo en el archivo de Excel, puedes modificar el siguiente fragmento de tu código:
js var wb = XLS.parse_xlscfb(cfb); var sheetsArray = []; wb.SheetNames.forEach(function(sheetName) { var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]); sheetsArray.push(oJS); });
En este código modificado, se crea una matriz vacía llamada
sheetsArray
antes del bucleforEach
. Dentro del bucle, se guarda cada objeto JSON de hoja de trabajo en la matrizsheetsArray
utilizando el métodopush
.Después de que se complete el bucle, la matriz
sheetsArray
contendrá un objeto JSON para cada hoja de trabajo en el archivo de Excel. Puedes acceder a cada objeto JSON utilizando su índice en la matriz.Aquí tienes el código completo modificado:
js 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); // Create an array to store the JSON objects var sheetsArray = []; // 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) // Add the JSON object to the array sheetsArray.push(oJS); }); // Do something with the sheetsArray... }; // Tell JS To Start Reading The File.. You could delay this if desired fileOut += reader.readAsBinaryString(oFile); console.log(fileOut); }Ahora puedes acceder a cada objeto JSON de hoja de trabajo utilizando su índice en la matriz
sheetsArray
. Por ejemplo, para acceder al objeto JSON de la primera hoja de trabajo, usaríassheetsArray[0]
.Respondida el Dec 17, 2020 a las 16:29 - por Gemini
Votos positivos: 0 | Votos negativos: 0