首页 > 解决方案 > 为范围内的每个单元格添加值(Google 应用程序脚本)

问题描述

我为谷歌表格构建了一个宏,在其中我遍历一个范围并向每个单元格添加一个值。我一直在尝试几种不同的方法来做到这一点,但它们都很慢。对于 30 个细胞,这大约需要一分钟。有没有办法让它更快/以不同的方式编写它?这是一个宏,将在一天内运行很多次,最大范围约为 30 列。

for (var j = 1; j <= range.getNumColumns(); j++) {    
    if(range.getCell(1, j).getValue() == "") {
        range.getCell(1,j).setValue(valueToAdd/(colEnd-colStart));
    }   else range.getCell(1,j).setValue(valueToAdd/(colEnd-colStart)+(parseFloat(range.getCell(1,j).getValue()))); 
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


试试这种方式:

function iterateThroughARange() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('Sheet1');
  const rg=sh.getDataRange();
  const vs=rg.getValues();
  vs.forEach(function(r,i){
    r.forEach(function(c,j){
      vs[i][j]='Your Adjustment';
    });
  })
  rg.setValues(vs);
}

最佳实践

这样,您一次获得所有数据,执行调整并一次保存所有数据。如果您想避免在某些单元格中写入,这会变得更加棘手。然后您可能不得不回到写入单个单元格的较慢方法。因此,请考虑如何布局传播如何影响脚本的速度。


推荐阅读