loops - 如何提高 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");}
}
}
解决方案
这部分代码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");
}
样本数据:
输出:
参考:
推荐阅读
- docker - 我可以使用 dokku predeploy 在 docker 容器中安装 google chrome 吗?
- c# - 如何在 Xamarin.iOS 中构建自定义 UIAlertController?
- amazon-web-services - 为什么我的子网数据源返回 VPC?
- python - 通过另一个日期时间系列过滤 Pandas 系列日期时间
- javascript - 如果我解构一个对象并更改其值,该值是否会保留在封闭对象中?
- java - 将文件附件从 Outlook 拖放到 Java 应用程序中 - 在 Swing 中有效,但在 JavaFX 中无效?
- vue.js - Vue 路由器空白页
- java - ProcessBuilder 无法识别嵌入式命令
- d3.js - 从 hive 样式图转换为并行绘制轴
- firebase - 使用 Firebase ID 令牌在 Google Cloud Storage JSON API 上进行身份验证