Google脚本显示/隐藏行非常慢(并且崩溃)

问题描述 投票:1回答:1

我有一个脚本,可以通过隐藏并显示适当的行来基于单元格(A1)过滤工作表。它正在工作,但是由于工作表每年都会变大,因此它在逐行隐藏/取消隐藏时已经运行非常缓慢。我想以某种方式批处理这些并仅执行一次隐藏/取消隐藏功能。不幸的是,我没有那么幸运。这是适用于两张纸的代码,但是速度太慢(太慢,有时会崩溃):

function chooseYearAdj() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ADJUSTMENTS");
var yrCell = sheet.getRange("A1").getValue()
//  var lastRow = sheet.getLastRow(); extra unnecessary var?
  var allRange = sheet.getRange("A3:A")
  var i=1
  if (yrCell == "ALL" || yrCell == "all"){
//      var rowAll = sheet.getRange("A:A"); extra unnecessary var?
      sheet.unhideRow(allRange);
    }
    else
    {
      sheet.hideRow(allRange); // hides all rows below header
  while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
    {
    var year = sheet.getRange("R"+i).getValue();  // Checks the R column
       if (year == yrCell) {         // year == chosen year
         var rowHide = sheet.getRange("A"+i);
         sheet.unhideRow(rowHide);
       }
      i=i+1
    }
  }
}
}

function chooseYearTS() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("TEAM SALES");
var yrCell = sheet.getRange("A1").getValue()
//  var lastRow = sheet.getLastRow(); extra unnecessary var?
  var rowRange = sheet.getRange("A:A")
  var i=3
  if (yrCell == "ALL" || yrCell == "all"){
    sheet.unhideRow(rowRange); //shows all rows
    }
    else
    {
      sheet.unhideRow(rowRange); // shows all rows below header
  while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
    {
    var year = sheet.getRange("CC"+i).getValue();  // Checks the R column
       if (year != yrCell && year != "") {         // year is neither blank nor the chosen year.
         var rowHide = sheet.getRange("A"+i);
         sheet.hideRow(rowHide);
       }
      i=i+1
    }
  }
}
}

其中第二个比第一个慢很多。我尝试在while循环中创建范围,然后隐藏/显示整个范围,但这没有任何改变。我承认,这是代码,可能会出现语法错误,因为这对我来说是新尝试:

function chooseYearAlt() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ADJUSTMENTS");
var yrCell = sheet.getRange("A1").getValue()
//  var lastRow = sheet.getLastRow(); extra unnecessary var?
  var allRange = sheet.getRange("A3:A")
  var i=1
  var toHide = sheet.getRange()
  if (yrCell == "ALL" || yrCell == "all"){
//      var rowAll = sheet.getRange("A:A"); extra unnecessary var?
      sheet.unhideRow(allRange);
    }
    else
    {
      sheet.hideRow(allRange); // hides all rows below header
  while ( sheet.getRange("A"+i).getValue() != "") { // i <= last interesting row
    {
    var year = sheet.getRange("R"+i).getValue();  // Checks the R column
       if (year == yrCell) {         // year == chosen year
         toHide = toHide + sheet.getRange("A"+i);


//         var rowHide = sheet.getRange("A"+i);
//         sheet.unhideRow(rowHide);
       }
      i=i+1
    }
    sheet.unhideRow(toHide);
  }
}
}

我在这里的问题是,不能保证年份列会保持顺序,因此,我不能仅仅找到第一年的正确年份,然后在某天隐藏正确的行数。 ,它们最终可能更加混杂。

关于如何加快速度的任何想法?

javascript performance google-apps-script google-sheets
1个回答
3
投票

这里是您的choiceYearAlt函数的更快选择:

© www.soinside.com 2019 - 2024. All rights reserved.