我正在为我们的商店开发销售跟踪器。我们使用销售跟踪器记录我们的销售情况,我有一个方法可以从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()函数不会触发。有没有解决方法呢?
答案 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