在所有行上迭代应用程序脚本函数



我有一个工作脚本:

function computeRows(){

for(var row=lastRow;row>1;row--){
if(ss.getRange('Q'+row).isBlank()){

var ss = SpreadsheetApp.openById('184C3kCDDv2sCElQB-INIyzTvmx8oNDXF0xqO7AH7xs8');
var lastRow = ss.getLastRow();
var currentRow = ss.getActiveSelection().getRow();
var phone = 'E'+lastRow;

ss.getRange('S'+lastRow).setValue('request');
ss.getRange('W'+lastRow).setFormula('A'+lastRow); // ('Now()');
ss.getRange('X'+lastRow).setFormula('CONCATENATE(C'+lastRow+'&" "&D'+lastRow+')');
ss.getRange('Y'+lastRow).setFormula('CONCATENATE(F'+lastRow+'&"n"&G'+lastRow+'&" "&H'+lastRow+')')
ss.getRange('Z'+lastRow).setFormula('CONCATENATE("("&LEFT('+phone+',3)&") "&MID('+phone+',4,3)&"-"&RIGHT('+phone+',4))');  
ss.getRange('AA'+lastRow).setFormula('B'+lastRow);

var UNIQUEID = ss.getRange('Q'+lastRow);
UNIQUEID.setValue('=DEC2HEX(RANDBETWEEN(0, 4294967295), 8)');
SpreadsheetApp.flush();
UNIQUEID.copyTo(UNIQUEID,{contentsOnly:true});

}
}
}

我需要它来遍历表中的所有行,而不仅仅是最后一行。我尝试过lastrowrow的各种组合,但只是混淆了自己。

调试脚本以尝试

function computeRows(){

var lastRow = ss.getLastRow(); // Moved this outside of for loop

for(var row=lastRow;row>1;row--){
if(ss.getRange('Q'+row).isBlank()){

var ss = SpreadsheetApp.openById('184C3kCDDv2sCElQB-INIyzTvmx8oNDXF0xqO7AH7xs8');

// var currentRow = ss.getActiveSelection().getRow(); // This is not referenced again

var phone = 'E'+row;

ss.getRange('S'+row).setValue('request');
ss.getRange('W'+row).setFormula('A'+row); // ('Now()');
ss.getRange('X'+row).setFormula('CONCATENATE(C'+row+'&" "&D'+row+')');
ss.getRange('Y'+row).setFormula('CONCATENATE(F'+row+'&"n"&G'+row+'&" "&H'+row+')')
ss.getRange('Z'+row).setFormula('CONCATENATE("("&LEFT('+phone+',3)&") "&MID('+phone+',4,3)&"-"&RIGHT('+phone+',4))');  
ss.getRange('AA'+row).setFormula('B'+row);

var UNIQUEID = ss.getRange('Q'+row);
UNIQUEID.setValue('=DEC2HEX(RANDBETWEEN(0, 4294967295), 8)');
SpreadsheetApp.flush();
UNIQUEID.copyTo(UNIQUEID,{contentsOnly:true});

}
}
}
  • 在for循环中,我用row替换了lastRow的所有实例。在for循环中,每次迭代更改的值为rowvar row=lastRow将其设置为最后一行的编号。然后在循环中,例如:
ss.getRange('S'+lastRow)

每次都会调用相同的最后一行。所以你需要将其更改为:

ss.getRange('S'+row)
  • 我将lastRow的初始化移到for循环之外。如果要设置循环的最大值,只需设置一次即可

参考

  • 循环的MDN-我建议尝试几个循环的例子来了解它们是如何工作的。如果你已经知道这一点,我很抱歉,但从代码上看,你似乎不明白

相关内容

最新更新