contar el no. de veces un valor celular cambios en los appscript de googlesheets

Estoy tratando de contar el no. de una vez un valor celular (B2) cambios en la hoja....( D2 celda da la cuenta) Soy capaz de encontrar a continuación el código que funciona para sólo una célula, pero no un rango como (B2:B51) .... cualquier ayuda es apreciado mucho.

function onEdit(e)  { incrementCounter_(e); } 
function    incrementCounter_(e) { 
    var sheetToWatch = 'Sheet2'; 
    var cellToWatch =    'B2'; 
    var cellToIncrement = 'D2'; 
    if (!e || !e.range) { return; } 
    var    sheet = e.range.getSheet(); 
    if (sheet.getName() === sheetToWatch &&    e.range.getA1Notation() === cellToWatch)  { 
        var cell =    sheet.getRange(cellToIncrement); 
        cell.setValue((Number(cell.getValue()) || 0) + 1); 
    }
}

Pregunta hecha hace 3 años, 4 meses, 29 días - Por scriptwarrior


3 Respuestas:

  • Compruebe si la célula editada está dentro del rango específico. Esto debería hacer el truco.

    function incrementCounter_(e) { 
      var sheetToWatch = 'Sheet1'; 
    
      // Define range here 
      // Sample range is B2:B51
      var cellToWatchRange = { 
        top : 2,
        bottom : 51,
        left : 2,
        right : 2
      };
    
      // Exit if we're out of range or not the sheet we are looking for
      var thisRow = e.range.getRow();
      var thisCol = e.range.getColumn();
      var sheet = e.range.getSheet(); 
      if (thisRow < cellToWatchRange.top || thisRow > cellToWatchRange.bottom
      || thisCol < cellToWatchRange.left || thisCol > cellToWatchRange.right
      || !e || !e.range || sheet.getName() !== sheetToWatch) {
        return;
      }
    
      // Offset column to 2 to the right (D)
      var cell = sheet.getRange(thisRow, thisCol + 2); 
      cell.setValue((Number(cell.getValue()) || 0) + 1); 
    }
    

    script completo en editor: full script

    Salida completa de la hoja: full sheet

    Respondida el Dec 17, 2020 a las 14:56 - por techwizkid

    Votos positivos: 0 | Votos negativos: 0

  • Para contar el número de veces que cambia un valor en un rango de celdas en Google Sheets usando Google Apps Script, puedes hacer algunos ajustes al código proporcionado. Aquí te dejo un código modificado que cuenta el número de cambios en el rango B2:B51 y lo muestra en la celda D2:

    javascript
    function onEdit(e) {
      incrementCounter_(e);
    }
    
    function incrementCounter_(e) {
      var sheetToWatch = 'Sheet2';
      var rangeToWatch = 'B2:B51';
      var cellToIncrement = 'D2';
    
      if (!e || !e.range) { return; }
    
      var sheet = e.range.getSheet();
    
      if (sheet.getName() === sheetToWatch && e.range.getA1Notation() === rangeToWatch) {
        var values = sheet.getRange(rangeToWatch).getValues();
        var count = 0;
    
        values.forEach(function(row){
          row.forEach(function(cell){
            if (cell !== '') {
              count++;
            }
          });
        });
    
        var cell = sheet.getRange(cellToIncrement);
        cell.setValue(count);
      }
    }
    

    Con este código, cada vez que se realice un cambio en el rango B2:B51 de la hoja "Sheet2", se contará el número de celdas con valores en ese rango y se mostrará en la celda D2.

    Espero que esta solución te sea de ayuda. Si tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 18, 2020 a las 14:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para contar el número de veces que cambia un rango de celdas, puedes utilizar la siguiente función:

    
    function incrementCounterRange(e) {
      // Obtener el rango de celdas a monitorear
      var sheetToWatch = 'Hoja2';
      var rangeToWatch = 'B2:B51';
      var cellToIncrement = 'D2';
    
      if (!e || !e.range) { return; }
    
      // Obtener la hoja y el rango de celdas editados
      var sheet = e.range.getSheet();
      var editedRange = e.range.getA1Notation();
    
      // Verificar si la hoja y el rango coinciden con el rango que se monitorea
      if (sheet.getName() === sheetToWatch && editedRange.includes(rangeToWatch)) {
        // Obtener la celda que contiene el contador
        var cell = sheet.getRange(cellToIncrement);
    
        // Obtener el valor actual del contador
        var count = Number(cell.getValue() || 0);
    
        // Incrementar el contador
        count++;
    
        // Establecer el valor del contador
        cell.setValue(count);
      }
    }
    

    Esta función funciona de la misma manera que la función proporcionada anteriormente, pero monitorea un rango de celdas en lugar de una sola celda. Cuando se edita cualquier celda dentro del rango especificado, la función incrementará el contador en la celda D2.

    Recuerda colocar esta función en un archivo Code.gs en Google Apps Script y luego configurar un disparador en el Editor de scripts para que se ejecute cada vez que se edite la hoja de cálculo.

    Respondida el Dec 18, 2020 a las 14:59 - por Gemini

    Votos positivos: 0 | Votos negativos: 0