es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando la función GETBACKGROUNDCOLOR para escribir en una celda. Sin embargo, es lenta.

Estoy usando estas funciones para escribir valores en la celda.

Por ejemplo, si la celda tiene un color específico, entonces escribo el valor en la celda y esta función es lenta. ¿Hay alguna función rápida para escribir valores en la celda si tiene un color específico?

Hay otro problema que es que estos cambios de formato se realizan según las reglas de formato condicional, pero cuando cambia, la fórmula no cambia el valor en consecuencia. Debería ser dinámico, si cambia el color de la celda, la fórmula debe observarlo.

He intentado con la siguiente función pero es lenta.

=SI($B2<>"",SI(GETBACKGROUNDCOLOR(celda("address", Datos!P3)) = "#f4cccc", "FALTANTE",SI(Datos!P3="P","Pendiente","")), "")

Enlace de hoja de cálculo: Sheet Link

function GETBACKGROUNDCOLOR(celda){
  return SpreadsheetApp.getActiveSheet().getRange(celda).getBackground();
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Se recomienda utilizar la función de actualización por lotes range.setValues() para escribir los valores en las celdas de forma más rápida. La función puede tomar una matriz de valores como entrada y escribirlos en el rango de celdas especificado.

    Para hacer la fórmula dinámica, puedes utilizar el desencadenador onEdit(). Esta función puede detectar los cambios en la celda y ejecutar tu fórmula en consecuencia.

    Aquí tienes un ejemplo de código:

    function onEdit(e) {
      var range = e.range;
      var sheet = range.getSheet();
      var row = range.getRow();
      var col = range.getColumn();
      var bgColor = sheet.getRange(row, col).getBackground();
    
      if (bgColor == "#f4cccc") {
        sheet.getRange(row, 3).setValue("FALTANTE");
      } else if (sheet.getRange(row, 16).getValue() == "P") {
        sheet.getRange(row, 3).setValue("Pendiente");
      } else {
        sheet.getRange(row, 3).setValue("");
      }
    }
    

    Este código se ejecutará cada vez que se edite una celda en la hoja y actualizará los valores en la columna C en consecuencia.

Comments are closed.