【问题标题】:How to speed up a script to hide rows that meet certain condition如何加快脚本隐藏满足特定条件的行
【发布时间】:2016-11-15 09:14:07
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

  1. 使用 getValues 从电子表格中检索所有数据。数据放在二维数组中。
  2. 从二维数组中搜索“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.
          }
        }
      }
    }

【讨论】:

  • 谢谢,所以对于我们要创建的数组,我们会通过 for 循环搜索 x 吗?我们还需要找出数组中位置的行号吗?
  • 是的。例如,通过getValues获取array时,可以如下搜索,因为array是二维的。行号也可以同时得到。 for (var row in array) { for (var col in array[row]) { if(array[row][col] = "x") { sheet.hideRows(row + 1); // (row + 1) 是行号。 } } }
  • 以下怎么样,我知道它不起作用,但它在正确的轨道上,有什么帮助或想法吗?函数 SummaryViewGeneratev1() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var column = ss.getRange('K:K'); var 值 = column.getValues(); for (var row = 0; row
  • 我刚看到你的回答。我想搜索所有列 K,所以我会放 K:K。当我运行脚本时,它说行超出范围?
  • 请将最新代码中的 if(array[row][col] = "x") 更改为 if(values[row][col] == "x")。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多