我正在尝试使用自己的函数(在此问题中显示虚拟函数)计算一些值,并且我希望该函数在用户编辑给定范围内的单元格时触发,但是即使在编写触发器后,唯一一次再次计算该值的时间是我转到脚本编辑器并单击 Save 。
我的功能:
function calculate(column) {
var sheet = SpreadsheetApp.getActiveSheet();
var column = sheet.getActiveCell().getColumn();
var values2d = sheet.getRange(1, 1, 15).getValues();
var values = [].concat.apply([], values2d);
var testRange2d = sheet.getRange(1, column, 15).getValues();
var testRange = [].concat.apply([], testRange2d);
var sum = 0;
for (var i = 0; i < 15; i++) {
if (testRange[i] == true) sum += values[i]
}
return sum;
}
function onEdit(e) {
var activeCell = SpreadsheetApp.getActiveSheet().getActiveCell();
if (activeCell.getBackground() === "#e3f5a2") activeCell.setBackground("#ffffff");
else activeCell.setBackground("#e3f5a2");
calculate();
}
然后是工作表:
除total之外的单元格是我调用函数的地方。而且,该值只会手动或如前所述进行更新,但是即使在触发事件时,我也曾尝试在触发器中执行其他操作,例如更改随机单元格的值,但是仍然有效。
答案 0 :(得分:1)
可能我建议以下内容。仅当更改第2列中的复选框时,才会发生这种情况。
function onEdit(event) {
try {
var sheet = event.source.getSheetByName("Sheet1")
if( event.range.getSheet().getName() === "Sheet1" ) {
if( event.range.getColumn() === 2 ) {
var values = sheet.getRange(1,1,15,2).getValues();
var sum = 0;
for( var i=0; i<values.length; i++ ) {
if( values[i][1] ) sum += values[i][0];
}
sheet.getRange(16,2,1,1).setValue(sum);
if( event.range.getBackground() === "#e3f5a2" )
event.range.setBackground("#ffffff");
else
event.range.setBackground("#e3f5a2");
}
}
}
catch(err) {
SpreadsheetApp.getUi().alert(err);
}
}