javascript - 为范围内的每个单元格添加值(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())));
}
解决方案
试试这种方式:
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);
}
这样,您一次获得所有数据,执行调整并一次保存所有数据。如果您想避免在某些单元格中写入,这会变得更加棘手。然后您可能不得不回到写入单个单元格的较慢方法。因此,请考虑如何布局传播如何影响脚本的速度。