【问题标题】:Hiding and unhiding spreadsheet rows using Google Apps Script使用 Google Apps 脚本隐藏和取消隐藏电子表格行
【发布时间】:2019-09-08 03:37:19
【问题描述】:

我在编写脚本方面是全新的,我刚刚了解了 Google 脚本编辑器。我目前正在尝试编写一个根据我的电子表格上的值自动隐藏行的方法。我设法查看了各种网站,但如果值发生变化,我也想取消隐藏行。

我是新手,所以我复制了我目前拥有的脚本,但我认为我在第 12 行(“else”部分)有问题。

   function onEdit() {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getActiveSheet();
     var LastRow = Sheet.getLastRow();
     for( i=1 ; i<=LastRow ; i++) { // i <= lastrow
       var status = Sheet.getRange("A"+i).getValue(); // Change A to 
the completed column
       if (status == 0) {                                          //     status == 0
         Sheet.hideRows(i);
       else {
           Sheet.unhideRows(i);
              }
       }
     }
   }

我希望有人帮助我在最后编写正确的代码,以便能够取消隐藏之前根据值隐藏的行。我碰巧使用不断变化的数据,隐藏/取消隐藏行对我来说非常重要。谢谢

【问题讨论】:

  • 如果行被隐藏,状态将如何从 0 变为其他值?

标签: google-apps-script google-sheets


【解决方案1】:
  • 您需要在启动 else 子句之前关闭 if 块。如果您的代码格式清晰,则更容易注意到此类语法错误。

  • Sheet 类没有 unhideRows() 方法。


在用于隐藏和取消隐藏行的方法之间有一些重要的区别需要注意。

为了隐藏,提供了这些方法:

为了取消隐藏,提供了一个方法:

如上所述,hideRows() 方法没有取消隐藏等效项。

hideRow(row)unhideRow(row) 都将 Range 对象作为参数,而不是行号。

因此您需要存储从getRange() 方法返回的Range 对象,以便在调用hideRows() 时将其作为参数提供。


这是一个经过清理和更正的版本:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var Sheet = ss.getActiveSheet();
  var LastRow = Sheet.getLastRow();
  for (i = 1; i <= LastRow; i++) {
    var statusRange = Sheet.getRange("A" + i);
    if (statusRange.getValue() == 0) {
      Sheet.hideRows(i);
    } else {
      Sheet.unhideRow(statusRange);
    }
  }
}

【讨论】:

  • @Mohdio 另一个值得注意的是,在循环中调用getValue() 非常慢,最好使用batch up operations: 使用getValues(),如果可能的话,甚至使用批量隐藏行hideRows()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多