Google脚本,仅允许选择每行1个复选框和每列3个复选框

问题描述 投票:-1回答:1

我想在以下Google Sheet上制作Google脚本,以允许每行仅选择1个复选框,最大允许每列选择3个复选框,如here所述。

如果在同一行上选择了2个复选框,则将显示一个弹出窗口,显示“请每行仅选择1个复选框”,并且最后的编辑应设置为FALSE。如果选择每列3个以上的复选框,则相同(弹出窗口显示“此列已经有3个选择,请选择其他列”,并将上一次编辑设置为FALSE)。

google-apps-script google-sheets row calculated-columns
1个回答
0
投票

此功能强加了限制,每行只能检查一次,每列只能检查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);  
      };          
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.