Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

283
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!