首页 > 解决方案 > 如何提高 Google 表格应用脚本中 for 循环的速度?

问题描述

我知道在使用 for 循环时我必须使用数组来提高速度,但我不明白该怎么做?我怎样才能重写这段代码?

function hiliptk() {
  //var I_INDEX = 1;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var dataValues = dataRange.getValues();
  for (var i=3; i<=98; i++) {
    var row = sheet.getRange(i, 1, 1,9);
    if (sheet.getRange(i,2).getValue()== "PTK") {
      row.setBackground("yellow");
    } else {row.setBackground("white");}
  }
}

标签: loopsfor-loopgoogle-sheets

解决方案


这部分代码var dataValues = dataRange.getValues();将返回一个二维数组,其中包含工作表中的数据。您可以使用每个子数组的第三个元素来检查它是否是“PTK”。

例子:

function hiliptk() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var dataValues = dataRange.getValues();
  var rangeListYellowBG = [];
  var rangelistWhiteBG = [];

  //this loop collects the range by the value of column C
  for (var i=2; i<dataValues.length; i++){
    if(dataValues[i][2] == 'PTK'){
      //push to array rangeListYellowBG if column C is 'PTK'
      rangeListYellowBG.push("A"+parseInt(i+1)+":I"+parseInt(i+1));
    }else{
      //else push to rangelistWhiteBG
      rangelistWhiteBG.push("A"+parseInt(i+1)+":I"+parseInt(i+1));
    }
  }
  //this will change the background color of the following range to yellow [A5:I5, A8:I8, A11:I11, A12:I12]
  sheet.getRangeList(rangeListYellowBG).setBackground("yellow");
  //this will change the background color of the following range to white [A3:I3, A4:I4, A6:I6, A7:I7, A9:I9, A10:I10, A13:I13]
  sheet.getRangeList(rangelistWhiteBG).setBackground("white");
}

样本数据:

在此处输入图像描述

输出:

在此处输入图像描述

参考:


推荐阅读