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

303
Vistas
¿Cómo codificar el botón "volver a ejecutar la función personalizada" en la función personalizada de Google Sheet?

Tengo el problema que tienen muchos cuando mi código Apps Script en Gsheets no se actualiza automáticamente a menos que registre un cambio en los parámetros. La función personalizada que estoy usando cuenta la cantidad de celdas que están resaltadas en un color específico. Cambiar el color de una celda no vuelve a ejecutar el script. Quería agregar una casilla de verificación en una celda y cada vez que hago clic en ella, vuelve a ejecutar la función.

 function COUNTCOLOR(countRange,colorRef,recalc) { var activeRg = SpreadsheetApp.getActiveRange(); var activeSht = SpreadsheetApp.getActiveSheet(); var activeformula = activeRg.getFormula(); var countRangeAddress = activeformula.match(/\((.*)\,/).pop().trim(); var backGrounds = activeSht.getRange(countRangeAddress).getBackgrounds(); var colorRefAddress = activeformula.match(/\,(.*)\)/).pop().trim(); var BackGround = activeSht.getRange(colorRefAddress).getBackground(); var countCells = 0; for (var i = 0; i < backGrounds.length; i++) for (var k = 0; k < backGrounds[i].length; k++) if ( backGrounds[i][k] == BackGround ) countCells = countCells + 1; return countCells; };

La función funciona, pero solo sin la variable "recalc", que es la variable que necesito para agregar una casilla de verificación para volver a ejecutar el código. Aparece un error: "Rango no encontrado (línea 6)". ¿Algún consejo para hacer que esto funcione?

¡Gracias!

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

0

Una manera más simple

 function COUNTCOLOR(countRange,recalc) { var activeRg = SpreadsheetApp.getActiveRange(); var activeSht = SpreadsheetApp.getActiveSheet(); var activeformula = activeRg.getFormula(); var countRangeAddress = activeformula.match(/\((.*),/).pop().trim(); var backGrounds = activeSht.getRange(countRangeAddress).getBackgrounds(); var backGround = activeRg.getBackground(); var countCells = 0; for (var i = 0; i < backGrounds.length; i++) for (var k = 0; k < backGrounds[i].length; k++) if ( backGrounds[i][k] == backGround ) countCells = countCells + 1; return countCells; };

La referencia de color es el fondo de la celda que contiene la fórmula.

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar

0

Funciona para mí de esta manera:

 function COUNTCOLOR(countRange,colorRef,recalc) { var activeRg = SpreadsheetApp.getActiveRange(); var activeSht = SpreadsheetApp.getActiveSheet(); var activeformula = activeRg.getFormula(); var [countRangeAddress,colorRefAddress] = activeformula.match(/\((.*)\)/).pop().split(','); var backGrounds = activeSht.getRange(countRangeAddress).getBackgrounds(); var BackGround = activeSht.getRange(colorRefAddress).getBackground(); var countCells = 0; for (var i = 0; i < backGrounds.length; i++) for (var k = 0; k < backGrounds[i].length; k++) if ( backGrounds[i][k] == BackGround ) countCells = countCells + 1; return countCells; };

Puede agregar trim() a cada variable si lo desea.

Podría ser algo como esto:

 var variables = activeformula.match(/\((.*)\)/).pop().split(','); var countRangeAddress = variables[0].trim(); var colorRefAddress = variables[1].trim();

O puede agregar replace() en la línea para deshacerse de los espacios:

 var [countRangeAddress,colorRefAddress] = activeformula .match(/\((.*)\)/).pop().replace(/\s+/g,'').split(',');
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