Saltar al contenido

SCRIPT de hoja de cálculo de Google Verifique si la celda editada está en un rango específico

Solución:

Hay un evento proporcionado como parámetro para su onEdit() función, y contiene la información necesaria sobre lo que se editó. Si te preguntaras que es eso (e) fue todo, esto es todo.

Desde un onEdit() se llama a la función cada editar, debe invertir el menor procesamiento posible para determinar si debe Salida. Al usar el evento que se transmite, necesitará menos llamadas de servicio, por lo que será más eficiente. La forma en que la respuesta de Rasmus convierte la notación A1 en números de columna y fila es buena si necesita ser flexible, pero si el rango de edición es fijo, simplemente puede usar valores constantes para las comparaciones, nuevamente, para reducir el tiempo de procesamiento requerido.

function onEdit(e) 
{
  var editRange = { // B4:J6
    top : 4,
    bottom : 6,
    left : 2,
    right : 10
  };

  // Exit if we're out of range
  var thisRow = e.range.getRow();
  if (thisRow < editRange.top || thisRow > editRange.bottom) return;

  var thisCol = e.range.getColumn();
  if (thisCol < editRange.left || thisCol > editRange.right) return;

  // We're in range; timestamp the edit
  var ss = e.range.getSheet();
  ss.getRange(thisRow,7)   // "G" is column 7
    .setValue(new Date()); // Set time of edit in "G"
} ​

La forma más fácil es NOMBRAR su rango de activación

Al nombrar su rango de “disparador”, entonces no tiene que meterse con el script una vez que haya establecido el nombre del rango dentro del script. Simplemente editando el rango de su rango con nombre dentro de la interfaz estándar de hojas de Google, el script seguirá funcionando incluso si expande o disminuye el tamaño de su rango.

Paso 1: Nombra tu rango

Nombre el rango de celdas que le interesa que actúe como disparador de su secuencia de comandos en caso de que edite cualquiera de las celdas en su rango según las instrucciones aquí: https://support.google.com/docs/answer/63175

Llamé a mi rango “triggerRange”.

Paso 2: Edite el nombre de su rango en la siguiente secuencia de comandos:

function onEdit(e) {
      var myRange = SpreadsheetApp.getActiveSheet().getRange('triggerRange'); //<<< Change Your Named Ranged Name Here inside the getRange() function.
      //SpreadsheetApp.getUi().alert("myRange in A1 Notation is: " + myRange.getA1Notation()); //If you're having problems, uncomment this to make sure your named range is properly defined

      //Let's get the row & column indexes of the active cell
      var row = e.range.getRow();
      var col = e.range.getColumn();
      //SpreadsheetApp.getUi().alert('The Active Cell Row is ' + row + ' and the Column is ' + col); //uncomment this out to do testing

      //Check that your active cell is within your named range
      if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) { //As defined by your Named Range
        SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');//Repalace Your Custom Code Here
      } else {
        SpreadsheetApp.getUi().alert('You Edited a Cell OUTSIDE the Range!');//Comment this out or insert code if you want to do something if the edited cells AREN'T inside your named range
        return;
      }
    }

PD: Gracias a los otros carteles por proporcionar el marco básico para este guión básico. Obviamente, he comentado bastante el guión para que puedas probarlo fácilmente. Elimine las alertas que creé dentro del script para una apariencia más limpia … o simplemente copie y pegue esto en su lugar:

function onEdit(e) {
  var myRange = SpreadsheetApp.getActiveSheet().getRange('triggerRange'); //<<< Change Your Named Ranged Name Here

  //Let's get the row & column indexes of the active cell
  var row = e.range.getRow();
  var col = e.range.getColumn();

  //Check that your active cell is within your named range
  if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) { //As defined by your Named Range
    SpreadsheetApp.getUi().alert('You Edited a Cell INSIDE the Range!');//Repalace Your Custom Code Here
  }
}

Simplemente puede verificar si el evento de edición ocurrió dentro del rango.

function onEdit(e)
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var editRange = sheet.getActiveRange();
  var editRow = editRange.getRow();
  var editCol = editRange.getColumn();
  var range = sheet.getRange("B4:J6");
  var rangeRowStart = range.getRow();
  var rangeRowEnd = rangeRowStart + range.getHeight();
  var rangeColStart = range.getColumn();
  var rangeColEnd = rangeColStart + range.getWidth();
  if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
      && editCol >= rangeColStart && editCol <= rangeColEnd)
  {
    // Do your magic here
  }
}

Reconozco que esto es muy detallado, pero todavía no he encontrado un método simple en range ala range.contains (range)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *