Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在谷歌应用软件scipts中加速这个循环?_Javascript_Google Apps Script_Google Sheets_Google Sheets Api - Fatal编程技术网

Javascript 如何在谷歌应用软件scipts中加速这个循环?

Javascript 如何在谷歌应用软件scipts中加速这个循环?,javascript,google-apps-script,google-sheets,google-sheets-api,Javascript,Google Apps Script,Google Sheets,Google Sheets Api,在我想说的任何事情之前,我知道批处理函数在更新电子表格方面更有效,但是在这里,我尝试创建一个充满交替颜色的列表,尽管我正在使用range.setBackgrounds()更新表格,但仍然需要花费很长的时间,有什么方法可以优化它吗 var range = SpreadsheetApp.getActiveSheet().getRange("B11:G30"); var background = []; var startRow = range.getRow();

在我想说的任何事情之前,我知道批处理函数在更新电子表格方面更有效,但是在这里,我尝试创建一个充满交替颜色的列表,尽管我正在使用
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);
var range=SpreadsheetApp.getActiveSheet().getRange(“B11:G30”);
var背景=[];
var startRow=range.getRow();
var maxRows=range.getRow()+range.getNumRows()
对于(行=startRow;行
这是的另一个版本,所以请不要拒绝他的回答

但这肯定会给您带来一些额外的性能提升:

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); 
}

其思想是,通过使用而不是两个
forEach
循环和元素分配操作,您将获得更好的性能,尤其是在输入矩阵较大的情况下。

这是的另一个版本,因此请不要接受他的答案

但这肯定会给您带来一些额外的性能提升:

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); 
}

其思想是,通过使用而不是两个
forEach
循环和元素分配操作,您将获得更好的性能,尤其是在输入矩阵较大的情况下。

您的范围未定义。请提供请注意可复制方面它现在起作用了吗?您的范围未定义。请提供请注意可复制方面它现在工作吗?非常感谢,运行速度比我的原始区域快很多,但有时它不运行?您如何运行它?您所说的
它不运行是什么意思?它是否返回任何错误?我把它放在一个尴尬的位置,因此它正在生成数组,但它没有更新背景,我只需要重新构造我的代码,现在项目完成了很多,运行速度比我原来的区域快得多,但有时它不运行?你是如何运行它的?你说的
它不运行是什么意思?它是否返回任何错误?我把它放在一个尴尬的位置,因此它生成了数组,但它没有更新背景,我只需要重新构造我的代码,现在项目完成了,可以自由使用Marios answer。我只分享我所知道的,我在这里更多的是学习而不是教学。请随意使用马里奥回答。我只分享我所知道的,我在这里更多的是学习而不是教书。