将复选框重置为false

时间:2018-07-05 07:43:07

标签: checkbox google-apps-script google-sheets

我有一个Google电子表格,其中A列的每一行都有复选框。我已经编写了一个脚本来对选中了复选框的所有行执行功能,但是我想在最后添加一个重置功能,以便在脚本运行后再次取消选中所有复选框。

我尝试过使用这样的for循环:

var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();

for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {     
    if (values[i][j] == true) {
      values[i].setValue(false);
    }
  }    
} 

但是很明显,这在我遇到错误时不起作用。

有人知道该怎么做吗?

6 个答案:

答案 0 :(得分:0)

此修改如何?我认为针对您的情况有几种解决方案。因此,请将此视为其中之一。

修改点:

  • 问题的原因是values[i].setValue(false);values[i]是一个数组。请使用setValue()的范围。
    • 但是在for循环中使用setValue()会导致更高的成本。因此,在此修改中,我使用了setValues()
  • 如果values为“ true”,则将“ false”放入values[i][j]
  • 使用setValues()将修改后的值放入工作表。

修改后的脚本:

var dataRange = sheet.getRange('A3:A');
var values = dataRange.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] == true) {
      values[i][j] = false; // Modified
    }
  }
}
dataRange.setValues(values); // Added

参考:

如果这不是您想要的,请告诉我。我想修改它。

答案 1 :(得分:0)

或者,由于您要取消选中范围内的所有内容(并且所有范围内都具有复选框),因此请执行以下操作:

sheet.getRange('A3:A').setValue(false);

没有检查/循环。

答案 2 :(得分:0)

以上发布的此解决方案会重置所有复选框; 但是,它还会意外地将其中值为 1 的单元格更改为 FALSE。

我想制作一个脚本来重置所有工作表上的复选框...

function resetCheckBoxesAllSheets() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]

var dataRange = sheet.getRange('A4:Z100');
var values = dataRange.getValues();
for (var i = 0; i < values.length; i++) {
  for (var j = 0; j < values[i].length; j++) {
    if (values[i][j] == true) {
      values[i][j] = false; // Modified
    }
  }
}
dataRange.setValues(values);


}//end of  sheets loop.
}// end of function...

答案 3 :(得分:0)

通过突出显示要“取消选中”区域的所有单元格,按住Crtl并双击空格键。

答案 4 :(得分:0)

remove-check-marks 方法是“uncheck”...

  var range = SpreadsheetApp.getActive().getRange('A21:A59');
  range.uncheck();

答案 5 :(得分:0)

我设置了一个复选框而不是图片中的标题 Sheet Image

我编写了一个脚本来检查数据范围并相应地检查取消选中所有。 这是脚本。

    function onEdit(e){
  Logger.log('OnEdit'); 
  var range = e.range;
  var cl  = range.getColumn(); 
  var rw = range.getRow(); 
  Logger.log('Row = ' + rw + '   Column = ' + cl); 
  var ActiveSheet = ss.getActiveSheet();  
  if(ActiveSheet.getName() === 'Companies' && rw == 1 && cl == 5){
    var isAllTrue  = ActiveSheet.getRange(rw, cl).getValue(); 
    if(isAllTrue == true){
      var Avals = ActiveSheet.getRange("A1:A").getValues();
      var Alast = Avals.filter(String).length;
      ActiveSheet.getRange(2, 5, Number(Alast-1)).setValue(true); 
    }
    else
    {
      var Avals = ActiveSheet.getRange("A1:A").getValues();
      var Alast = Avals.filter(String).length;
      ActiveSheet.getRange(2, 5, Number(Alast-1)).setValue(false); 
    }
  }  
}

Change sheet name as per your need.

注意:如果不触发自动,则为相同的函数创建 onedit 触发器。