我目前使用下面的代码填充空白单元格上面的单元格值:
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);
}
这应该做同样的事情,但在范围内只执行两次,而不管大小。