我有一个工作脚本:
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});
}
}
}
我需要它来遍历表中的所有行,而不仅仅是最后一行。我尝试过lastrow
和row
的各种组合,但只是混淆了自己。
调试脚本以尝试
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循环中,每次迭代更改的值为row
,var row=lastRow
将其设置为最后一行的编号。然后在循环中,例如:
ss.getRange('S'+lastRow)
每次都会调用相同的最后一行。所以你需要将其更改为:
ss.getRange('S'+row)
- 我将
lastRow
的初始化移到for循环之外。如果要设置循环的最大值,只需设置一次即可
参考
- 循环的MDN-我建议尝试几个循环的例子来了解它们是如何工作的。如果你已经知道这一点,我很抱歉,但从代码上看,你似乎不明白