我想在以下Google Sheet上制作Google脚本,以允许每行仅选择1个复选框,最大允许每列选择3个复选框,如here所述。
如果在同一行上选择了2个复选框,则将显示一个弹出窗口,显示“请每行仅选择1个复选框”,并且最后的编辑应设置为FALSE。如果选择每列3个以上的复选框,则相同(弹出窗口显示“此列已经有3个选择,请选择其他列”,并将上一次编辑设置为FALSE)。
此功能强加了限制,每行只能检查一次,每列只能检查3次。您必须提供arrayrange参数A1Notation字符串和工作表名称。
function onEdit(e) {
//e.source.toast('Entry: ' + e.value);
const sh=e.range.getSheet();
if(sh.getName()=='SheetName') {
const mcpr=1;
const mcpc=3;
const arrayrange='A1:C10';//you provide
const arg=sh.getRange(arrayrange);
const avs=arg.getValues();
const ulr=arg.getRow();
const ulc=arg.getColumn();
const lrr=ulr+arg.getHeight()-1;
const lrc=ulc+arg.getWidth()-1;
if(e.range.columnStart<=lrc && e.range.rowStart<=lrr && e.value=="TRUE") {
//e.source.toast('Flag1');
let rc=avs[e.range.rowStart-ulr].filter(function(e){return e;}).reduce(function(a,v){ if(v){return a+1;} },0);
if(rc>mcpr){
e.range.setValue("FALSE");
e.source.toast('Sorry maximum checks per row is ' + mcpr);
};
let cc=avs.map(function(r,i){
return r[e.range.columnStart-ulc];
}).filter(function(e){return e}).reduce(function(a,v){if(v){return a+1;}},0)
if(cc>mcpc){
e.range.setValue('FALSE');
e.source.toast('Sorry maximum checks per column is ' + mcpc);
};
}
}
}