0

这是我在 Google 电子表格onEdit()函数中使用的以下代码片段:

else if(editedCell.getColumn() == 13 && editedCell.getRow() == 29) {
    var modVal = sheet.getRange("L29").getValue();

    if(editedCell.getValue() == "Yes") {
      sheet.getRange("G23").setValue(sheet.getRange("G23").getValue() + modVal);
      sheet.getRange("G24").setValue(sheet.getRange("G24").getValue() + modVal);
      sheet.getRange("G25").setValue(sheet.getRange("G25").getValue() + modVal);
      sheet.getRange("G26").setValue(sheet.getRange("G26").getValue() + modVal);
      sheet.getRange("G27").setValue(sheet.getRange("G27").getValue() + modVal);
      sheet.getRange("G28").setValue(sheet.getRange("G28").getValue() + modVal);
      sheet.getRange("G29").setValue(sheet.getRange("G29").getValue() + modVal);
    }
    else if(editedCell.getValue() == "No") {
      sheet.getRange("G23").setValue(sheet.getRange("G23").getValue() - modVal);
      sheet.getRange("G24").setValue(sheet.getRange("G24").getValue() - modVal);
      sheet.getRange("G25").setValue(sheet.getRange("G25").getValue() - modVal);
      sheet.getRange("G26").setValue(sheet.getRange("G26").getValue() - modVal);
      sheet.getRange("G27").setValue(sheet.getRange("G27").getValue() - modVal);
      sheet.getRange("G28").setValue(sheet.getRange("G28").getValue() - modVal);
      sheet.getRange("G29").setValue(sheet.getRange("G29").getValue() - modVal);
    }
}

如您所见,我只是简单地逐行手动执行每个单元格。有没有办法指定一个范围数组,然后在一个简单的foreach()类型函数中进行数学运算?我不知道如何问我的问题,但我相信在查看我上面的代码时这是不言而喻的。

谢谢。

4

1 回答 1

1
var modVal = sheet.getRange("L29").getValue();

// Create a function that updates a given sheet at a given range with
// the result of a value function
var changeRangeValue = new function(sheet, range, value) {
    sheet.getRange(range).setValue(value(sheet, range));
};

var calculateValue;

if(editedCell.getValue() == "Yes") {
    // Create a function that returns a value of a given sheet at a given range with
    // the mod value added
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue() + modValue; 
    };
}
else if(editedCell.getValue() == "No") {
    // Create a function that returns a value of a given sheet at a given range with
    // the mod value added        
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue() - modValue;
    };
}
else {
    // Create a function that returns the current value of a given sheet at a given range
    calculateValue = new function(sheet, range) {
        return sheet.getRange(range).getValue();
    };
}

// Go through G23-G29 and update the range value with the correct value
for(var i=23; i <= 29; i++) {
    changeRangeValue(sheet, "G"+i, calculateValue);
}
于 2012-06-29T20:03:27.263 回答