Arrays 如何合并数组以加快隐藏行的速度?

Arrays 如何合并数组以加快隐藏行的速度?,arrays,google-apps-script,Arrays,Google Apps Script,我有一个脚本,我想使用它,这样我的经理可以快速看到电子表格中的哪些项目需要订购零件。该脚本可以快速轻松地隐藏包含与零件排序无关的信息的列,然后隐藏列S中的值为FALSE(不需要零件排序)的所有行(数千行)。隐藏列部分几乎是即时的,但是隐藏行部分非常慢。我知道为了加快速度,应该将数据加载到数组中,然后循环将在内存中的数组上运行,而不是多次调用电子表格。我见过类似的问题,但答案似乎并没有确切地解释如何做到这一点。我读过的一个例子表明,这已经在使用数组了,这让我更加困惑。任何能为我指明正确方向的帮助都

我有一个脚本,我想使用它,这样我的经理可以快速看到电子表格中的哪些项目需要订购零件。该脚本可以快速轻松地隐藏包含与零件排序无关的信息的列,然后隐藏列S中的值为FALSE(不需要零件排序)的所有行(数千行)。隐藏列部分几乎是即时的,但是隐藏行部分非常慢。我知道为了加快速度,应该将数据加载到数组中,然后循环将在内存中的数组上运行,而不是多次调用电子表格。我见过类似的问题,但答案似乎并没有确切地解释如何做到这一点。我读过的一个例子表明,这已经在使用数组了,这让我更加困惑。任何能为我指明正确方向的帮助都将不胜感激。以下是我正在使用的脚本:

function showPartsNeeded() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getRange('S:S').getValues();
  for(var i=1; i< data.length; i++){
    if(data[i][0] == false){
      sheet.hideRows(i);
    }
  sheet.hideColumns(2,2);
  sheet.hideColumns(5,2);
  sheet.hideColumns(8,1);
  sheet.hideColumns(10,2);
  sheet.hideColumns(13,18);
  sheet.hideColumns(47,14);

  }
}
函数showPartsNeed(){
var sheet=SpreadsheetApp.getActiveSheet();
var data=sheet.getRange('S:S').getValues();
对于(变量i=1;i
我尝试了以下方法将“需要部分”列标记为false的行加载到数组中,然后仅隐藏数组中存在的行,但我只得到了“找不到方法getRange()”。第15行错误,我不明白原因:

function showPartsNeeded() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getRange().getValues();
  sheet.hideColumns(2,2);
  sheet.hideColumns(5,2);
  sheet.hideColumns(8,1);
  sheet.hideColumns(10,2);
  sheet.hideColumns(13,18);
  sheet.hideColumns(47,14);
  var temp = [];
  for (var i = 1; i< data.length; i++ ) {
    if (data[i][19] == false) {
      temp.push.data[i];
    }
  }
 if (temp.length > 0 ) {
    sheet.hideRows(temp);
  }

}
函数showPartsNeed(){
var sheet=SpreadsheetApp.getActiveSheet();
var data=sheet.getRange().getValues();
表1.隐藏柱(2,2);
表1.隐藏柱(5,2);
表1.隐藏柱(8,1);
表1.隐藏柱(10,2);
表1.hideColumns(13,18);
表1.隐藏柱(47,14);
var-temp=[];
对于(变量i=1;i0){
表.隐藏窗口(温度);
}
}

我相当肯定这张表。hideRows(temp);行是错误的,但我仍在试图找出如何使用hideRows()数组中的数据

您正在数千行中循环,每次发现一行具有您调用sheet.hideRows(i)的条件。对工作表函数或范围的调用非常慢,这就是为什么建议在一个数组中执行所有操作,然后在范围中仅将更改作为一个操作插入

在这种情况下,您可能可以通过对符合条件的连续行进行分组来改进代码,而不是对每个行调用sheet.hideRows(i),您可以调用(第一行,最后一行)


因此,如果您有10个连续的行具有该条件,而不是进行10次调用,您只需进行一次调用。例如,床单隐藏(20,30)

您正在数千行中循环,每次发现一行具有您调用sheet.hideRows(i)的条件。对工作表函数或范围的调用非常慢,这就是为什么建议在一个数组中执行所有操作,然后在范围中仅将更改作为一个操作插入

在这种情况下,您可能可以通过对符合条件的连续行进行分组来改进代码,而不是对每个行调用sheet.hideRows(i),您可以调用(第一行,最后一行)


因此,如果您有10个连续的行具有该条件,而不是进行10次调用,您只需进行一次调用。例如,床单隐藏(20,30)

嗨,杰拉尔多。我理解你的建议,我明白这是怎么回事。我唯一的问题是,我还有一个与电子表格同步的android应用程序。重新排列行最终会导致与此应用程序的同步时间过长,因为从技术上讲,每一行都会发生更改,而应用程序通常只同步更改的行。我想我已经知道了如何将数据放入数组中,但我仍在试图知道如何将该数据与hideRows()一起使用。嗨,Gerardo。我理解你的建议,我明白这是怎么回事。我唯一的问题是,我还有一个与电子表格同步的android应用程序。重新排列行最终会导致与此应用程序的同步时间过长,因为从技术上讲,每一行都会发生更改,而应用程序通常只同步更改的行。我想我已经知道了如何将数据放入数组中,但我仍在试图知道如何将该数据与hideRows()一起使用。