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

277
Vistas
Secuencia de comandos de validación de datos de Optimize AppScript

Tengo dos columnas en una hoja de Google, columna A y B.

La columna A contiene una "X" si queremos agregar validación de datos en la columna B. La columna A está en blanco si no queremos validación de datos en la columna B.

Creé el siguiente script, que funciona pero tarda alrededor de 2 minutos en ejecutar 500 filas. ¿Hay alguna forma de escribir el script de manera más eficiente para que se ejecute más rápido o esta es la mejor solución?

 function AddDataValidation(){ var ss4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet4'); for(row=2; row<=500; row++){ if (ss4.getRange('A'+row).getValue() == 'X'){ ss4.getRange('B'+row).setDataValidation(SpreadsheetApp.newDataValidation() .requireValueInList(['a', 'b', 'c'], true) .build()) } } }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Descripción:

Para optimizar los scripts de hojas de cálculo, utilice siempre Range.getValues()/setValues(). Entonces obtengo todos los valores en lugar de individualmente. Esto se aplica a todas las demás categorías, por lo que, para su ejemplo, use Range.getDataValidations() y Range.setDataValidations(). Observe que he envuelto la regla entre paréntesis de matriz. Esto se debe a que las reglas deben ser una matriz 2D para configurarlas en la hoja de cálculo. Por favor, hágame saber la diferencia en el rendimiento.

Guion

 function AddDataValidation() { var ss4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet4'); var data = ss4.getDataRange().getValues(); var row = 0; var rule = SpreadsheetApp.newDataValidation().requireValueInList(['a', 'b', 'c']).build(); var rules = []; // data start in row 1 index 0 so skip header for( row=1; row<data.length; row++ ) { if( data[row][0] === 'X' ) { rules.push([rule]); } else { rules.push([null]); } } // assuming header in row 1 start in row 2 ss4.getRange(2,2,rules.length,1).setDataValidations(rules); }

Referencias

  • https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#newDataValidation()
  • https://developers.google.com/apps-script/reference/spreadsheet/range#setDataValidations(Validación de datos)
about 4 years ago · Juan Pablo Isaza Denunciar

0

Adición de validaciones de datos

Es posible que desee borrar las validaciones de datos primero

 function AddDataValidation(){ const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet0'); const vs = sh.getRange(2,1,sh.getLastRow() - 1,2).getDisplayValues(); const rule = SpreadsheetApp.newDataValidation().requireValueInList(['a', 'b', 'c'], true).build(); let vo = vs.map((r,i) => { if(r[0] == "X") { return [rule]; } else { return [null]; } }) sh.getRange(2,2,vo.length,1).clearDataValidations().clearContent(); sh.getRange(2,2,vo.length,1).setDataValidations(vo); }

Borré tanto las validaciones de datos como el contenido porque el contenido incorrecto puede causar problemas con la validación.

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