Apps脚本用上面的单元格值填充空白,运行速度非常慢



我目前使用下面的代码填充空白单元格上面的单元格值:

function fillBlanks() {

for (var r = 3; r <= sheetLR; r++) {
for (var c = 2; c <= 8; c++) {

if(sheet.getRange(r, c).getValue() == "") {

var valInsert = sheet.getRange(r-1, c).getValue();
sheet.getRange(r, c).setValue(valInsert);

}   
}
}
}

代码工作得很好,但是,它非常慢,并且一直超过时间限制。有什么加快速度的办法吗?

感谢Fazila

解决方案:

访问表的方法,如getRange(),getValue()setValue(),执行时间很长,因此不建议在循环内执行。

最好的做法是从一个范围中获取所有需要的值到一个数组中,在循环中操作该数组,然后将数组写回范围。

示例代码:

function fillBlanks() {
var sheet = SpreadsheetApp.getActiveSheet();
var sheetLR = sheet.getLastRow();
var range = sheet.getRange(2,2,sheetLR-1,7);
var values = range.getValues();

for (var r = 1; r < sheetLR-1; r++) {
for (var c = 0; c < 7; c++) {

if(values[r][c] == "") {

values[r][c] = values[r-1][c];

}   
}
}
range.setValues(values);
}

这应该做同样的事情,但在范围内只执行两次,而不管大小。

相关内容

  • 没有找到相关文章

最新更新