我有一个代码:
function check(){
var sh = SpreadsheetApp.getActive();
var sheet = sh.getSheetByName("1")
var getNames = sheet.getRange("A:A").getValues().filter(String).toString().split(",");
for (var j = 0; j < getNames.length; j++) {
var sheetnow = sh.getSheetByName(getNames[j]);
var last = sh.getSheetByName(getNames[j]).getLastRow();
for (var i = 1 ; i <= last ; i++ ) {
var rangeactive = sheetnow.getRange(i ,7).getValue();
var setval = sheetnow.getRange(i ,8);
if (rangeactive == 1 && setval.getValue() == "") {
setval.setValue("OK");
}
}
}
}
它仍然可以正常工作,但是 For 会很慢,因为所有工作表都有超过 200000 行并且会运行超过 6 分钟。还有其他更有效的方法吗?谢谢
答案 0 :(得分:1)
试试这个:
function check(){
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("1")
const names = sh.getRange(1,1,sh.getLastRow()).getValues().flat();
names.forEach(n => {
let s = ss.getSheetByName(n);
let vs = s.getRange(1,7,s.getLastRow(),2).getValues();
let sv = s.getRange(1,8,sh.getlastRow()).getValues();
vs.forEach((r,i) => {
if(r[0] == 1 && r[1] == '') {
sv[i][0] = "OK";
}
});
s.getRange(1,8,sv.length,sv[0].length).setValues(sv);
});
}