在所有行上迭代应用脚本功能 尝试调试的脚本参考

问题描述

我有这个工作脚本:

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循环中,我将lastRow的所有实例替换为row。在for循环中,更改每次迭代的值为rowvar row=lastRow将其设置为最后一行的编号。然后在您的循环中,例如:
ss.getRange('S'+lastRow)

每次都将调用相同的最后一行。因此,您需要将其更改为:

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

参考

  • MDN for loop-我建议也许尝试一些循环示例,以了解循环的工作方式。如果您已经知道这一点,我深表歉意,但是通过代码,您似乎并不了解。