-3

我是谷歌脚本的新手,我一直在努力做到这一点,所以当一个复选框设置为 True 时,另一个复选框将设置为 False,onEdit。谁能告诉我那个代码会是什么样子?

4

1 回答 1

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

电子表格如下所示:

在此处输入图像描述

在此处输入图像描述

  1. GS 文件
  2. Javascript 文档
  3. 事件对象

我不得不玩这个,这是另一种使用更多列的方法:

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

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

电子表格看起来像这样:

在此处输入图像描述

在此版本中,您可以将每一行全部取消选中,但如果您选中一个,则其他所有行都设置为未选中。您可以取消选中已选中的那个,然后该行的所有内容都将被取消选中。有很多场景,所以你只需要弄清楚你想要实现的逻辑。

于 2018-12-14T05:08:05.270 回答