我正在尝试更新Google表格中的1个值。当我选择一个已经包含数字的单元格(例如:500),并且我写了一个数字(例如:100)时,它应该在不按下按钮(500 + 100)的情况下添加它们。
现在,当我编辑单元格时,onEdit(e)
将被触发。然后,我可以通过执行以下操作来获取单元格的值:
SpreadsheetApp.getActiveSpreadsheet().getActiveRange().getValue()
但是,我无法获得之前的(更改/编辑之前)值,因此我总是最终将两个相同的值一起添加。这是一些示例代码:
//Obviously only example code
var sheet = SpreadsheetApp.getActiveSpreadsheet();
function onEdit(e) {
if(activeRange.getColumn() == 3) {
var currentValue = sheet.getActiveRange().getValue();
var newValue = currentValue + sheet.getActiveRange().getValue();
sheet.getActiveRange().activeRange.setValue(oldValue);
}
}
显然我想将sheet.getActiveRange().getValue()
中的newValue
替换为PREVIOUS值,否则我将两个值相加,这两个值是相同的。我希望你明白我的意思。永远不会在任何地方发送/保存/记录单元格的先前值。
在像Javascript / jQuery这样的东西中,我会这样做:When cell has been selected, save the current value in a variable. Then, when the cell has changed value, add the old value to the new value, and change the cell's value to be the newest added up value
。非常简单,但我无法找到有关如何在Google Apps脚本中执行此类触发器的任何内容。
我怎么可能这样做?谢谢!
答案 0 :(得分:1)
"它应该在不按下按钮的情况下添加它们"不,这不会发生,但如果你在Sheet1单元格C2中有500,你需要复制它,就像我第一次评论的那样 - 可能是另一个标签上的C2(Sheet2)。然后当您输入100(并按Enter键)时,您需要去抓取旧的重复值(500),将其添加到当前编辑的值(100)然后设置新计算的值(600):
function onEdit(e) {
if(activeRange.getColumn() == 3) {
var ss = e.source;
var sheet1 = ss.getActiveSheet();
var sheet2 = ss.getSheetByName("Sheet2");
var old = sheet2.getRange('C2').getValue(); // duplicated value
var current = sheet.getActiveRange().getValue(); // value after hitting enter to edit
var new = current + old;
sheet1.getActiveRange().setValue(new);
sheet2.getRange('C2').setValue(new); // update duplicated value
}
}
您需要处理匹配哪些行以查找重复值,但对于此示例,我只使用了第2行。