如何加快脚本以隐藏满足特定条件的行

时间:2016-11-14 22:42:53

标签: javascript arrays google-apps-script google-sheets

我有以下函数可以逐行搜索列,并在找到x时隐藏一行。它有效,但很慢。

function SummaryViewGenerate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
  var lastRow = sheet.getLastRow();
  for( i=1 ; i<=lastRow ; i++) { // i <= lastRow
       var status = sheet.getRange("K"+i).getValue();
       if (status == "x") { // status == "x"
         sheet.hideRows(i);
       } 
   }
}

问题在于它的使用速度非常慢。关于如何改进它的任何想法。有人在另一个线程中提到过将它放入数组中。我仍然是一个编码新手,所以任何正确方向的帮助都会有用。

1 个答案:

答案 0 :(得分:1)

我认为getValues()会更快。参考是https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()

  1. 使用getValues从电子表格中检索所有数据。数据放在2D数组中。
  2. 从2D数组中搜索“x”。
  3. 样品如下。

        function SummaryViewGenerate(){
          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var sheet = ss.getActiveSheet();
          var array = sheet.getRange('k1').offset(0, 0, sheet.getLastRow(), 1).getValues();
          for (var row in array) {
            for (var col in array[row]) {
              if(array[row][col] == "x") {
              sheet.hideRows(row + 1); // (row + 1) is row number.
              }
            }
          }
        }