是否可以将一个复选框切换为另一个复选框打开/关闭?

时间:2018-12-14 02:40:34

标签: google-apps-script google-apps-script-editor

我是google脚本的新手,并且我一直在尝试使其成为一个脚本,因此当一个复选框设置为True时,另一个复选框将设置为False,onEdit。谁能告诉我该代码是什么样的?

1 个答案:

答案 0 :(得分:1)

切换复选框

这是一个onEdit函数,它将把同一行中的复选框切换为相反的状态。本质上,它们的行为就像每行上的单选按钮组一样。

function onEdit(e){
  var rg=e.range;
  var value=rg.getValue();
  var ss=e.source;
  var sh=rg.getSheet();
  var name=sh.getName();
  var col=rg.getColumn();
  var row=rg.getRow();
  if(name=='Sheet22' && (col==3 || col==1) && row>0 && row<16){//row>0 is not required unless you change the locations
    //Logger.log('Row: %s Col:%s',row,col);
    var hi=15;
    var lo=1
    var l=sh.getRange(lo,1,hi,1);
    var m=sh.getRange(lo,2,hi,1);
    var r=sh.getRange(lo,3,hi,1);
    var mA=m.getValues();//Anything can be in this array as I wont be setting values in that range
    switch(col){
      case 1://left
        lA=l.getValues();
        for(var i=0;i<lA.length;i++){
          mA[i][0]=lA[i][0]?false:true;
        }
        r.setValues(mA);
        break;
      case 3://right
        rA=r.getValues();
        for(var i=0;i<rA.length;i++){
          mA[i][0]=rA[i][0]?false:true;
        }
        l.setValues(mA);
        break;
    }
  }
  return;
}

电子表格的外观如下:

enter image description here

enter image description here

  1. GS Documentation
  2. Javascript Documentation
  3. Event Objects

我必须解决这个问题,这是使用更多列的另一种方法:

function onEdit(e){
  var rg=e.range;
  var value=rg.getValue();
  var ss=e.source;
  var sh=rg.getSheet();
  var name=sh.getName();
  var col=rg.getColumn();
  var row=rg.getRow();
  var rows=sh.getLastRow();
  var cols=5;
  var shName='Sheet22';
  if(name==shName && col<=cols && row>1 && row<=rows){
    Logger.log(col);
    Logger.log(row);
    var cRg=sh.getRange(2,1,rows,cols);
    var cA=cRg.getValues();
    for(var i=0;i<cA.length;i++){
      for(var j=0;j<cols;j++){
        if(row==i+2 && cA[i][col-1] && j!=col-1){//see comment below 
          cA[i][j]=false;
        }
      }
    }
  }
  cRg.setValues(cA);
}

上面所选行的注释是,如果这是所选行,而不是所选列,并且选中了该行的所选列,则取消选中该列。

电子表格看起来像这样:

enter image description here

在此版本中,您可以使所有行都处于未选中状态,但是如果选中其中一个,则所有其他行都设置为未选中状态。您可以取消选中已选中的那一项,然后对该行全部取消选中。有很多方案,因此您只需要弄清楚要实现的逻辑即可。