更改时添加上一个和当前单元格值

时间:2015-10-09 00:59:28

标签: google-apps-script

我正在尝试更新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脚本中执行此类触发器的任何内容。

我怎么可能这样做?谢谢!

1 个答案:

答案 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行。