繁体   English   中英

如何在 google app scipts 中加速这个循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM