是否有一个在编辑单元格时触发的事件,但该值不会更改?

时间:2016-04-08 20:55:37

标签: javascript google-apps-script google-sheets google-apps

我正在为我们的商店开发销售跟踪器。我们使用销售跟踪器记录我们的销售情况,我有一个方法可以从Stack Overflow的问题答案中修改(不幸的是我没有链接或用户,我现在可以将其归因于此!)用于编辑细胞无需精神上添加如下所示的数量。

 function onEdit(e) {


  var editRange = { // C5:O13
    top : 5,
    bottom : 13,
    left : 12,
    right : 12
  };

  //Checks if last value was not a number to avoid loop
  if (isNaN(e.value) == true) {
    return;
  }

  if (isNaN(e.oldValue) == true) {
    var newValue = parseInt(e.value);
  } else {
    var newValue = parseInt(e.value) + parseInt(e.oldValue);
  }

  // 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;

  var posRow = parseInt(thisRow);
  var posCol = parseInt(thisCol);

  // We're in range
  var ss = e.range.getSheet();
  ss.getRange(posRow, posCol).setValue(newValue);

} ​

这允许销售设备的人(例如价值645美元)通过在单元格上键入当前销售额来增加其当前金额(例如,$ 450)。代码采用旧数量,将其添加到新数量,并将其保存回单元格。

当前的销售价值与新的销售价值相同时出现问题(例如,目前售出的价格为500美元,我们刚刚再次卖出500美元)。值没有更改,因为相同的值被输入到单元格中,并且onEdit()和onChange()函数不会触发。有没有解决方法呢?

1 个答案:

答案 0 :(得分:0)

我建议用简单的动作模拟一个事件:复制 - 粘贴单元格将其加倍:

  • 转到单元格
  • 复制它:Ctrl + V
  • 粘贴它:function onEdit(e) { var editRange = { // L5:L13 top : 5, bottom : 13, left : 12, right : 12 }; var oldValue, newValue; // check if object was changed if (e.value == "[object Object]") { oldValue = e.range.getValue(); newValue = oldValue; } else { oldValue = e.oldValue; newValue = e.value; } //Checks if last value was not a number to avoid loop if (isNaN(newValue) == true) { return; } if (isNaN(oldValue) == true) { var newValue = parseInt(newValue); } else { var newValue = parseInt(newValue) + parseInt(oldValue); } // 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; var posRow = parseInt(thisRow); var posCol = parseInt(thisCol); // We're in range var ss = e.range.getSheet(); ss.getRange(posRow, posCol).setValue(newValue); } 此操作将触发脚本。

以下是代码:

document.ready