[英]How to speed up this loop in google app scipts?
在我想说的任何事情之前,我知道批处理函数在更新电子表格方面更有效,但是在这里我试图制作一个充满交替颜色的列表,虽然我正在使用range.setBackgrounds()
更新工作表,但它仍在继续长,有没有办法可以优化这个?
var range = SpreadsheetApp.getActiveSheet().getRange("B11:G30");
var background = [];
var startRow = range.getRow();
var maxRows = range.getRow() + range.getNumRows()
for (row = startRow; row < maxRows ; row++) {
if (row % 2 == 1) {
var colour = ["#D9D9D9", "#D9D9D9", "#D9D9D9", "#D9D9D9", "#D9D9D9", "#D9D9D9"];
}
else {
var colour = ["#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF"];
}
background.push(colour);
}
range.setBackgrounds(background);
function alternateColors() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const sr=2;
const rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,sh.getLastColumn());
let cA=rg.getBackgrounds();
cA.forEach(function(r,i){
r.forEach(function(c,j){
if(i%2==1) {
cA[i][j]='#d9d9d9';
}else{
cA[i][j]='#ffffff';
}
});
});
rg.setBackgrounds(cA);
}
这是Cooper's answer的替代版本,所以请不要不接受他的回答。
但这肯定会给您带来一些额外的性能提升:
function alternateColors() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const sr=2;
const rg=sh.getRange(sr,1,sh.getLastRow()-sr+1,sh.getLastColumn());
let cA=rg.getBackgrounds();
cA=cA.map((r,i)=>Array(r.length).fill([i%2==1?'#d9d9d9':'#ffffff']).flat());
rg.setBackgrounds(cA);
}
这个想法是,通过使用map而不是两个forEach
循环和元素分配操作,您将获得更好的性能,尤其是在输入矩阵很大的情况下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.