¿Cómo optimizar esta función para un conjunto de datos grande (100k filas y 10 columnas) utilizando Google Apps Script?
Esta función funciona bien, pero solo para hasta 20k filas. ¿Qué podría cambiar para hacerla más rápida?
“`
const SOURCE_FILE_ID = ‘ID’;
function getData() {
const sourceSheet = SpreadsheetApp.openById(SOURCE_FILE_ID);
const sourceRng = sourceSheet.getSheetByName(‘ativcopiar’).getRange(1, 1, sourceSheet.getLastRow(), 9);
const sourceValues = sourceRng.getValues();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(‘Ativ.’);
var destinationRng = sheet.getRange(1, 1, sheet.getLastRow(), 9);
destinationRng.clearContent();
destinationRng.setValues(sourceValues);
}
A veces, supera el límite de tiempo.
¡Agradezco cualquier ayuda!
Gracias.
davy.ai
Hay algunas cosas que podrías hacer para hacer que esta función se ejecute más rápido:
Range.setValues()
yRange.getValues()
pueden manejar rangos grandes, por lo que puedes pasar todo el rango de datos de una sola vez.Usar
range.clear()
en lugar derange.clearContent()
: el métodoclear()
borra todo el contenido y formato del rango, mientras queclearContent()
solo borra los valores y deja el formato intacto. Usarclear()
en lugar declearContent()
puede acelerar el proceso.Reducir la cantidad de llamadas a otros servicios: llamar a servicios externos como
SpreadsheetApp.openById()
puede ser lento. Podrías intentar cachear el ID de la hoja de origen y solo buscar la hoja cuando sea necesario.Usar
Range.getLastColumn()
en lugar de codificar el número de columnas: si el número de columnas en el rango de origen cambia, la función fallará. UsargetLastColumn()
asegurará que siempre se use el número correcto de columnas.Con estos cambios, el código modificado se vería así:
Nota: estos cambios no necesariamente resolverán completamente el problema, pero deberían ayudar a mejorar el rendimiento de la función.