奇怪的服务器错误GAS

时间:2014-01-20 12:08:37

标签: google-apps-script

我有一个在谷歌脚本中运行的功能。然而,它没有完成,它进入主循环,然后它停在某处,没有错误。如果我查看执行说明,它说服务器错误等待一段时间再试一次。 我尝试了几次运行但它一直停滞,但每次i和j的最后一个值都与之前的停顿不同。 我真的无法想象这是一个真正的服务器错误,它必须是代码。

 function start() {
  var sheet1 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1');
  var sheet2 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1');
  var range1 = sheet1.getRange(1,1,54,26); 
  var range2 = sheet2.getRange(1,1,10,7); 
  var teller = 0;

  for(var i = 1; i<=range1.getNumRows(); i++){
    for(var j = 1; j<=range2.getNumRows(); j++){
      Logger.log(i);
      Logger.log(j);
      if(range1.getCell(i, 8).getValue() == range2.getCell(j, 2).getValue() && range1.getCell(i, 16).getValue() == range2.getCell(j, 4).getValue() && range1.getCell(i, 19).getValue() == range2.getCell(j, 6).getValue()){
        range1.getCell(i,25).setValue(range2.getCell(j, 7).getValue());
        range2.getCell(j,1).setValue("Script")
        teller++;
      }
    }
  }
  Logger.log(teller);

};

1 个答案:

答案 0 :(得分:1)

我想你是在过多地使用SpreadsheetApp api。最佳做法是将所需的数据加载到脚本中并对其进行迭代。以您的脚本为例:

function start() {
  var sheet1 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1');
  var sheet2 = SpreadsheetApp.openByUrl("xx").getSheetByName('Blad1');
  var range1 = sheet1.getRange(1,1,54,26); 
  var range2 = sheet2.getRange(1,1,10,7); 
  var data1 = range1.getValues();
  var data2 = range2.getValues();
  var teller = 0;

  for(var i = 0, r = data1.length; i < r; i++){
    for(var j = 1, c = data2.length; j < c; j++){
      Logger.log(i);
      Logger.log(j);
      if(data1[i, 8] == data2[j, 2] && data1[i, 16] == data2[j, 4] && data1[i, 19] == data2[j, 6]){
        range1.getCell(i,25).setValue(data2[j, 7]);
        range2.getCell(j,1).setValue("Script")
        teller++;
      }
    }
  }
  Logger.log(teller);
};