Así que escribí un código que va a la identificación de un libro basado en un "diccionario" y toma los datos de todas las hojas de ese libro después de la segunda hoja. Luego, esos datos se agregan en una sola matriz. Mi pregunta se centra en la idea de mejorar el ciclo for en la instrucción if. Eso es agregar el "nombre del proveedor" al frente del subarreglo que representa una fila en la hoja/datos. Me dijeron que esto es ineficiente ya que el código tiene que pasar por cada subarreglo y agregar un valor.
¿Hay una manera más eficiente de hacer esto? Lo hice de esta manera porque estoy copiando los valores de un rango que se almacenan como una matriz de matrices. Entonces, para agregar datos, tengo que volver a acceder a los subarreglos. ¿Es posible agregar los nuevos datos (nombre del proveedor) al mismo tiempo que se copian los valores? ¿Sería esto más eficiente? Se recomendó usar una función de flecha, sin embargo, no estoy familiarizado con su uso.
function aggregate() { var combinedData = [] var idArray = { "suppliername":"id", }; for (var supplierName in idArray){ var sBook = SpreadsheetApp.openById(idArray[supplierName]); var sheets = sBook.getSheets(); for (var index = 2; index <sheets.length; index++){ var sheet = sheets[index]; var dataLength = sheet.getRange("E5:E").getValues().filter(String).length; if(dataLength != 0){ var dataRange = sheet.getRange(5,2,dataLength,14); var dataValues = dataRange.getValues(); for (row in dataValues) { dataValues[row].unshift(supplierName); }; combinedData = combinedData.concat(dataValues); }; }; }; var dataLength = combinedData.length; const dSheet = SpreadsheetApp.openById("id").getSheets()[0]; dSheet.getRange(2,1,dSheet.getMaxRows(),dSheet.getMaxColumns()).clearContent(); var dRange = dSheet.getRange(2,1,dataLength,15); dRange.setValues(combinedData); };En su guión, ¿qué tal la siguiente modificación?
for (row in dataValues) { dataValues[row].unshift(supplierName); }; combinedData = combinedData.concat(dataValues); combinedData = combinedData.concat(dataValues.map(e => [supplierName].concat(e)));o
combinedData = [...combinedData, ...dataValues.map(e => [supplierName, ...e])];