【问题标题】:What is the most efficient way to hide rows in Google Sheets?在 Google 表格中隐藏行的最有效方法是什么?
【发布时间】:2017-03-04 23:43:12
【问题描述】:

我编写了这个脚本,它应该每晚运行,但问题是执行时间太长,因此服务器将其关闭。我们有一个电子表格,用作日历来组织我们的学校制作,我们希望它能够自动隐藏过去的日子。我大约 8 个月前编写了这个脚本,我花了大约 6 到 7 个小时才让它工作,并且在我们深入到电子表格中需要太长时间之前它工作了一段时间。这是脚本:

function hidePastDays(){
  var ss = SpreadsheetApp.getActive();
  var s = ss.getSheetByName("OVERVIEW");
  var s2 = ss.getSheetByName("settings");
  var rows = s.getMaxRows();
  var today = s2.getRange(3, 2).getValue();
  var allsheets = ss.getSheets();
  s.showRows(1, rows);
  var dates = s2.getRange(3,4,rows-2).getValues();
  for (var d=0; d < dates.length; d++){
    if (dates[d]<today-2){
      s.hideRows(d+3, 1);
      for (var g in allsheets){
        var sheet=allsheets[g];
        if (sheet.getSheetName() == "OVERVIEW" || sheet.getSheetName() == "settings"){}
        else {
          sheet.hideRows(d+3, 1);
        }
      }
    }
  }
}

我在想,向下扫描到正确的行然后将它们全部隐藏为一个范围一定更容易,因为我认为脚本一次只做一个。

感谢您提供的任何帮助。

【问题讨论】:

  • 行是否按日期排列?如果代码找到具有第一个当前日期的行,如果代码隐藏从 3 到该行减去 1 行的所有行,是否可以工作?这可以在一个操作中完成,而不是一个一个地隐藏。
  • 是的。电子表格会自动添加日期。但是,它需要找到当前日期,然后向后移动一行,因为如果同一天有多个活动,则日期不会重复,日期部分只是留空。

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


【解决方案1】:

这是一个查找代表比昨天早几天的行范围的例程。它一次隐藏所有这些,我猜这比一次做一个要快得多。当然,这假设您可以按日期顺序获取所有日期。

function hideYesterdays()
{
  var sht = SpreadsheetApp.getActiveSheet();
  var drng = sht.getDataRange();
  var drngA = drng.getValues();
  var rows = drng.getLastRow();
  var firstRow = 6; //the row where dates start
  var day = 86400000;
  var yesterday = new Date().getTime() - day;// 1 day is 86400000 milliseconds

  var rowcntr = 0;
  while(drngA[rowcntr + firstRow][0] < yesterday) //the zero comes from the fact that my dates were in row 1. 
  {
    rowcntr++;
  }
  sht.hideRows(firstRow, rowcntr);
}

【讨论】:

  • 谢谢!这是一个很大的帮助。日期都是有序的,但是如果一天有多个活动,它只会添加一个没有日期的空白行(因为它写在上面的行中)。所以我需要通过将var rowcntr = 0; 更改为var rowcntr = -1; 来稍微修改您的公式,这给了我前两天的时间,这实际上是我想要的。 :)
  • 其实我之前的评论写错了。我必须将day 的值翻倍才能有前两天。
  • 听起来你已经解决了这个问题。玩得开心。
  • 谢谢。我已经实现了它,让它再次工作真是太好了(否则我们需要手动隐藏 10 张纸上的行)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2021-03-04
  • 2017-10-02
  • 2015-05-10
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多