我有一个在谷歌脚本中运行的功能。然而,它没有完成,它进入主循环,然后它停在某处,没有错误。如果我查看执行说明,它说服务器错误等待一段时间再试一次。 我尝试了几次运行但它一直停滞,但每次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);
};
答案 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);
};