【问题标题】:Is it possible to have one checkbox toggle another checkbox On/Off?是否可以让一个复选框打开/关闭另一个复选框?
【发布时间】:2018-12-14 02:40:34
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 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);
    }
    

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

    电子表格看起来像这样:

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

    【讨论】:

    • 哇,非常感谢您的彻底回答。现在这更有意义了,我想知道走错路了。谢谢!
    • 欢迎您。如果您能检查我的答案,我将不胜感激。谢谢。
    猜你喜欢
    • 2012-04-04
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多