2012-06-29 33 views
0

下面是我用我的谷歌電子表格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()類型函數中進行數學運算?我不確定如何問我的問題,但我相信在查看上面的代碼時它是不言而喻的。

謝謝。

回答

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); 
}