哪个函数比 FOR 更快? Google Apps 脚本 - Google 表格

时间:2021-06-19 03:12:40

标签: google-apps-script google-sheets

我有一个代码:

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 分钟。还有其他更有效的方法吗?谢谢

https://docs.google.com/spreadsheets/d/13p4xrIfACk_l_oRgBnDr8VaOtEL9o4SxeIql5eqryOc/edit#gid=1480346296

1 个答案:

答案 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);
  });  
}