Cómo optimizar esta función para un gran conjunto de datos (100k filas y 10 columnas) con Google Apps Script?

0

Pregunta

Esta función se ejecuta bien, pero por arriba de 20k filas. ¿Qué podría cambiar para hacer que se ejecute rápido?

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 luz! Gracias.

1

Mejor respuesta

1

Yo creo que su objetivo es el siguiente.

  • Desea reducir el costo del proceso de la secuencia de comandos.

En este caso, como sobre el uso de las Hojas de la API? Cuando las Hojas de la API se utiliza, el costo del proceso se puede reducir un poco. Ref Cuando las Hojas de la API se utiliza para la secuencia de comandos, esto se hace como sigue.

Modificado el script:

Antes de utilizar este script, por favor habilitar las Hojas de la API en la Avanzada de los servicios de Google.

function myFunction() {
  const SOURCE_FILE_ID = '###';
  const sheet = SpreadsheetApp.openById(SOURCE_FILE_ID).getSheetByName('ativcopiar');
  const dstSS = SpreadsheetApp.getActiveSpreadsheet();
  var dstSheet = dstSS.getSheetByName('Ativ.');
  var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
  destinationRng.clearContent();
  SpreadsheetApp.flush();
  const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values;
  Sheets.Spreadsheets.Values.update({values}, dstSS.getId(), "Ativ.", {valueInputOption: "USER_ENTERED"});
}

Referencias:

2021-11-23 23:19:15

Todo parece correcto, pero me da un error, diciendo que el nº de filas en el rango debe ser de al menos 1 para var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9);
Antonio Santos

@Antonio Santos Gracias por responder. Me disculpo por las molestias. En ese caso, ¿cómo acerca de la modificación de var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow(), 9) a var destinationRng = dstSheet.getRange(1, 1, dstSheet.getLastRow() || 1, 9);? Y, mediante la modificación de este, por favor, prueba de nuevo.
Tanaike

Muchas gracias!
Antonio Santos

En realidad he probado exactamente igual que ahora. Me había marcado como derecho, sabiendo que ace en sus respuestas. Sin embargo, para que esto funcione, usted tendría que cambiar const values = Sheets.Spreadsheets.Values.get(dstSS.getId(), "'ativcopiar'!A1:I" + sheet.getLastRow()).values; para const values = Sheets.Spreadsheets.Values.get(SOURCE_FILE_ID, "'ativcopiar'!A1:I" + sheet.getLastRow()).values; Gracias por estar siempre ayudando a la comunidad!
Antonio Santos

@Antonio Santos Gracias por responder. Me alegro de que tu problema se ha resuelto. Gracias, también.
Tanaike

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................