我正在为我们的商店开发销售跟踪器。我们用销售跟踪器记录我们的销售情况,我有一个根据 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);
}
这使得销售设备(例如值(value) 645 美元)的人可以通过在单元格上输入当前销售额来添加当前金额(例如 450 美元)。该代码获取旧金额,将其添加到新金额中,然后将其保存回单元格中。
当当前销售值(value)与新销售值(value)相同时(例如,当前销售 500 美元,而我们刚刚再次销售 500 美元),就会出现问题。这些值没有更改,因为在单元格中输入了相同的值,并且 onEdit() 和 onChange() 函数不会触发。有什么解决办法吗?
最佳答案
我建议通过简单的操作来模拟一个事件:复制粘贴单元格以将其加倍:
- 转到单元格
- 复制:
Ctrl + C
- 粘贴:
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);
}
关于javascript - 是否有一个事件在编辑单元格时触发,但值没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36509219/