如果单元格值为true,则自动隐藏列

时间:2018-10-31 17:14:57

标签: google-apps-script google-sheets

对于Google表格,有一个复选框功能,如果选中,则写为TRUE,如果未选中,则写为FALSE。我正在尝试寻找一种方法来隐藏B列中已选中(或== TRUE)复选框的行。但是,该脚本无法正常工作,我不知道为什么。

function onOpen() {
  var s = SpreadsheetApp.getActive().getSheetByName('Scrum');
  s.showRows(1, s.getMaxRows());

  s.getRange('B:B')
    .getValues()
    .forEach( function (r, i) {
    if (r[0] == 'TRUE') 
      s.hideRows(i + 1);
    });
}

1 个答案:

答案 0 :(得分:0)

问题是标准复选框返回一个布尔值。

这可以是truefalse,但不能是TRUEFALSE,在Javascript中未定义。

因此,这些将正确测试单元格值:

if (r[0] == true)           // test for boolean true
      s.hideRows(i + 1);

or

if (r[0]) 
      s.hideRows(i + 1);    // test for boolean true

但不是

if (r[0] == 'TRUE')          // 'TRUE' is a string value
      s.hideRows(i + 1);

 or

if (r[0] == TRUE)            // TRUE is an undefined constant.
      s.hideRows(i + 1);

现在,超级混乱的事情是公式中的true / false不区分大小写。 (正确/错误和正确/错误相同)。所以要小心!

还要注意,范围s.getRange('B:B')是整个1000行,因此会变慢。例如,最好限制范围线B1:B20。不确定这对您来说是个问题...

编辑:以下是一个工作脚本:

function hide() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.showRows(1, sheet.getMaxRows());

  var values = sheet.getRange('E1:E7').getValues();

  values.forEach( function (r, i) {
    Logger.log(r);
    if (r[0]) 
      sheet.hideRows(i + 1);
    }); 
}

脚本之前

enter image description here

脚本后:

enter image description here