onEdit 未看到粘贴的更改,google 张

onEdit not seeing pasted changes, google sheets

我在 (J1) 中有一个单元格计数器,每次单元格 (J2) 更改时都会计数,终于让计数器开始工作,但我注意到它只“看到”手动编辑,不计算任何复制-粘贴值(我将值直接粘贴到单元格 J2 中)。无论如何要解决这个问题,因为手动输入值会破坏整个目的。

这是我目前所拥有的

function onEdit(e) {
  incrementCounter_(e);
}

/**
* Increments a counter in a cell when another cell is edited.
*
* @param {Object} e The event object.
*/
function incrementCounter_(e) {
  var sheetToWatch = 'Work Order';
  var cellToWatch = 'J2';
  var cellToIncrement = 'J1';
  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);
  }
}

如果您的意思是粘贴到包含 J2 的范围(不是从 J2 开始),那么您需要检查 J2 是否在编辑范围内。

脚本:

function incrementCounter_(e) {
  var sheetToWatch = 'Work Order';
  var cellToIncrement = 'J1';

  var range = e.range;
  // get the dimension of the range
  var rowStart = range.getRow();
  var rowEnd = range.getLastRow();
  var colStart = range.getColumn();
  var colEnd = range.getLastColumn();
  // boolean if range edited does not include J2 (2, 10)
  var invalidRange = rowStart > 2 || rowEnd < 2 || colStart > 10 || colEnd < 10;

  // return if range is invalid
  if (!e || !e.range || invalidRange){
    return;
  }
  var sheet = e.range.getSheet();
  // range should be valid (negated boolean value)
  if (sheet.getName() === sheetToWatch && !invalidRange) {
    var cell = sheet.getRange(cellToIncrement);
    cell.setValue((Number(cell.getValue()) || 0) + 1);
  }
}

输出:

注:

  • onEdit 仅由用户编辑触发。

尝试

function onEdit(e){
  var sh = e.source.getActiveSheet()
  for (var i = e.range.rowStart;i<=e.range.rowEnd;i++){
    for (var j = e.range.columnStart;j<=e.range.columnEnd;j++){
      incrementCounter_(sh.getRange(i,j),sh)
    }
  }
}
function incrementCounter_(rng,sh) {
  var sheetToWatch = 'Work Order';
  var cellToWatch = 'J2';
  var cellToIncrement = 'J1';
  if (sh.getName() === sheetToWatch && rng.getA1Notation() === cellToWatch) {
    var cell = sh.getRange(cellToIncrement);
    cell.setValue((Number(cell.getValue()) || 0) + 1);
  }
}

function onEdit(e) {
  var sh = e.source.getActiveSheet()
  var sheetToWatch = 'Work Order';
  if (sh.getName() === sheetToWatch) {
    var cellToWatch = 'J2';
    var cellToIncrement = 'J1';
    for (var i = e.range.rowStart; i <= e.range.rowEnd; i++) {
      for (var j = e.range.columnStart; j <= e.range.columnEnd; j++) {
        if (sh.getRange(i, j).getA1Notation() === cellToWatch) {
          sh.getRange(cellToIncrement).setValue((Number(sh.getRange(cellToIncrement).getValue()) || 0) + 1)
        }
      }
    }
  }
}