Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
App Scripts Loop Copy basado en Condition Optimization

Escribí un script de aplicación que copia valores de la hoja 2 a la hoja 1 solo si la celda de la columna A (en la hoja 1) contiene el valor "Copiar". Este script funciona bien, pero todo lo que tenga más de 50 filas se ejecuta bastante lento, ¿hay alguna forma de optimizar esta función para que se ejecute más rápido?

 function CopyValues() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var Sheet1 = ss.getSheetByName('Sheet1'); var Sheet2 = ss.getSheetByName('Sheet2'); //If Column A = Copy then copy the values in Sheet 2 column B to W to sheet 1 for (var i=1; i<=1000; i = i + 1) if (Sheet1.getRange(i,1,100,1).getValue() == 'Copy'){ Sheet2.getRange(i,2,1,23).copyTo(Sheet1.getRange(i,2,1,23),SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); }; };
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Creo que su objetivo es el siguiente.

  • Su guión funciona bien. Y desea reducir el costo del proceso de su script.

En esta modificación, me gustaría reducir el costo del proceso del script por parte de Sheets API. Pensé que cuando se usa Sheets API para su situación, el costo del proceso podrá reducirse un poco.

Cuando Sheets API se refleja en su secuencia de comandos, se convierte en lo siguiente.

Guión modificado:

Antes de usar este script, habilite Sheets API en los servicios avanzados de Google .

 function CopyValues2() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var Sheet1 = ss.getSheetByName('Sheet1'); var Sheet2 = ss.getSheetByName('Sheet2'); // Retrieve copied row index. var rows = Sheet1.getRange("A1:A" + Sheet1.getLastRow()).getValues().reduce((ar, [a], i) => { if (a == "Copy") ar.push(i); return ar; }, []); // Create a request body for using the batchUpdate method of Sheets API. var srcSheetId = Sheet2.getSheetId(); var dstSheetId = Sheet1.getSheetId(); var requests = rows.map(e => ({ copyPaste: { source: { sheetId: srcSheetId, startRowIndex: e, endRowIndex: e + 1, startColumnIndex: 1, endColumnIndex: 24 }, destination: { sheetId: dstSheetId, startRowIndex: e, endRowIndex: e + 1, startColumnIndex: 1 }, pasteType: "PASTE_NORMAL" } })); // Request Sheets API using the created request body. Sheets.Spreadsheets.batchUpdate({ requests }, ss.getId()); }
  • Cuando se ejecuta este script, pensé que se obtenía el mismo resultado de mostrar el script al reducir el costo del proceso.

Referencias:

  • Método: hojas de cálculo.batchUpdate
  • CopiarPegarSolicitud
about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba esto:

 function CopyValues() { const ss = SpreadsheetApp.getActive(); const sh1 = ss.getSheetByName('Sheet1'); const sh2 = ss.getSheetByName('Sheet2'); const vs = sh1.getRange(1,1,sh1.getLastRow(),23).getValues().filter(r => r[0] == "Copy"); sh2.getRange(sh2.getLastRow() + 1, 1,vs.length,23).setValues(vs) }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda