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

380
Vistas
App Script - ¿Cómo puedo acelerar mi función setBackground()?

Tengo problemas con mi función setBackground() en el script de la aplicación. ¿Cómo puedo acelerarlo? Está funcionando pero la ejecución es muy lenta.

He escrito esto:

 function changeColor(sheetName, startColorCol, sizeCellCol, totalCellCol) { var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName) for (z = startColorCol; z <= totalCellCol; z = z + sizeCellCol) { // As this is called onEdit() we don't want to perform the entire script every time a cell is // edited- only when a status cell is mofified. // To ensure this, before anything else we check to see if the modified cell is actually in the status column. if (sSheet.getActiveCell().getColumn() == z) { var row = sSheet.getActiveRange().getRow(); var value = sSheet.getActiveCell().getValue(); var col = "white"; // Default background color var colLimit = z; // Number of columns across to affect switch (value) { case "fait": col = "MediumSeaGreen"; break; case "sans réponse": col = "Orange"; break; case "proposition": col = "Skyblue"; break; case "Revisions Req": col = "Gold"; break; case "annulé": col = "LightCoral"; break; default: break; } if (row >= 3) { sSheet.getRange(row, z - 2, 1, sizeCellCol).setBackground(col); } } } }

Vi que podría necesitar usar operaciones por lotes, pero no tengo idea de cómo hacer que funcione.

La cuestión es que necesito colorear un rango de celdas cuando se cambia el valor de una. Algunas ideas ?

Gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Problemas:

  • Solo desea verificar una sola celda, la celda que se editó ( var value = sSheet.getActiveCell().getValue(); ). Por lo tanto, no tiene sentido usar un bucle.

Solución:

  • Use el objeto de evento para obtener los datos relacionados con la celda editada (hoja, índice de columna, índice de fila, etc.), en lugar de usar un bucle y verificar getActiveCell().getColumn() cada vez. Este objeto de evento se pasa a onEdit como un parámetro de forma predeterminada ( e en el ejemplo a continuación), pero debe pasarlo a su función changeColor como argumento.
  • Antes de hacer cualquier otra cosa, verifique si la celda editada es una de las celdas editadas que se encuentran en el rango que está rastreando (hoja correcta, fila sobre 3, columna entre startColorCol y totalCellCol .
  • Si la celda editada está en el rango adecuado, actualice los colores de fondo.

Ejemplo de código:

 function onEdit(e) { // ...Some stuff... changeColor(e, sheetName, startColorCol,sizeCellCol, totalCellCol); } function changeColor(e, sheetName, startColorCol,sizeCellCol, totalCellCol) { const range = e.range; const column = range.getColumn(); const row = range.getRow(); const sSheet = range.getSheet(); if (sSheet.getName() === sheetName && column >= startColorCol && column <= totalCellCol && row >= 3) { const value = range.getValue(); let col = "white"; // Default background color switch (value) { case "fait": col = "MediumSeaGreen"; break; case "sans réponse": col = "Orange"; break; case "proposition": col = "Skyblue"; break; case "Revisions Req": col = "Gold"; break; case "annulé": col = "LightCoral"; break; default: break; } sSheet.getRange(row, column-2, 1, sizeCellCol).setBackground(col); } }
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