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

How to speed up a script to hide rows that meet certain condition

本文关键字:满足 隐藏 特定条件 脚本 何加速 加速      更新时间:2023-09-26

我有以下函数,它可以逐行搜索列,并在找到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);
       } 
   }
}

问题是,它是超级慢,我使用。有什么改进的办法吗?有人在另一个线程中提到将其放入数组。我仍然是一个编码新手,所以任何帮助在正确的方向将是有用的。

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

  1. 使用getValues从电子表格中检索所有数据。数据以二维数组形式存放。
  2. 从2D数组中搜索"x"

示例如下。

    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.
          }
        }
      }
    }