sheets scripts script openbyurl macro google ejemplos docs developers developer apps app google-apps-script google-spreadsheet

google-apps-script - scripts - openbyurl google script



Gran conjunto de datos que excede el tiempo máximo de ejecución (1)

Tengo un script que está cargando el contenido de una hoja de cálculo en scriptDB pero la hoja de cálculo tiene alrededor de 15,000 filas, 9 columnas y me sigue dando un error de "tiempo máximo de ejecución excedido".

Estoy usando la función que figura en la documentación de Google para cargar los datos:

function loadDatabaseFromSheet() { var spreadsheet = SpreadsheetApp.openById(SPREADSHEET_KEY); var sheet = spreadsheet.getActiveSheet(); var columns = spreadsheet.getLastColumn(); var data = sheet.getDataRange().getValues(); var keys = data[0]; var db = ScriptDb.getMyDb(); for (var row = 1; row < data.length; row++) { var rowData = data[row]; var item = {}; for (var column = 0; column < keys.length; column++) { item[keys[column]] = rowData[column]; } db.save(item); } }

¿Hay alguna manera de acelerar las cosas o voy a tener que dividirlo en unos pocos miles?


Llamar a db.save(item) 15000 veces es lo que está causando la lentitud. En su lugar, use operaciones masivas si va a guardar esa cantidad de datos.

var db = ScriptDb.getMyDb(); var items = []; for (var row = 1; row < data.length; row++) { var rowData = data[row]; var item = {}; for (var column = 0; column < keys.length; column++) { item[keys[column]] = rowData[column]; } items.push(item); } db.saveBatch(items,false);

Llamar a la operación de guardar una vez al final le ahorra todos los tiempos de ida y vuelta, por lo que esto acelerará mucho su código y terminará antes de que exceda el tiempo máximo de ejecución.