Google Apps脚本挂起(javascript)

时间:2017-07-14 21:53:19

标签: javascript google-apps-script

以下Javascript正在挂起。我一直在教自己使用Apps脚本对表格中的数据进行排序。我的网络开发人员朋友和我在过去2小时内一直无能为力,为什么这个特定的脚本停滞不前。它只是说永远运行脚本......

发生的事情是我将电子表格的一部分指定为日历区域,其中已经有一个我的其他功能打印到其上的动态日历。出于测试目的,我隔离了这个函数并给它一个虚拟数组,但函数应循环遍历日历,找到'date'的COORD,即1,2,3,4th,并返回该日期下空单元格的坐标(我将数据放入日历的地方)。

function printCalendarValues(array){ 
  var array = [0,143,534,342,54,1,41,1];
  var Calendar_Display_range = recruiter_sheet.getRange('B8:H19');
  var Calendar_Display_values = Calendar_Display_range.getValues();     
  function getCellBelow(day, rangeArray){
    for(i=0; i<rangeArray.length; i++){
      for(j=0;j<rangeArray[i].length; j++){
        if(rangeArray[i][j]==day){
          var res = [i+9,j+2];
          return res;
        };        
      };
    }
  };  
  for(i=0;i<2;i++){ //< ---- THIS IS WHERE IT BREAKS
    // If I take the code in this for loop out of it and run it
    // only once then it runs as expected. It breaks when I put it in
    // this for loop. You can see I only loop twice right now. I 
    // did that for testing, but i've tried twice, or array.length 
    // anything other than running it once breaks it.
    var cellBelow = getCellBelow(i+1, Calendar_Display_values);  
    recruiter_sheet.getRange(cellBelow[0],cellBelow[1]).setValue(array[i]);
  }; 
};

1 个答案:

答案 0 :(得分:1)

您需要在函数顶部定义变量i

function printCalendarValues(array){
  var i;//Define i - its' value will be undefined

或者您需要在var参数中添加for关键字。 for (var i = 0, etc目前,变量i是全局变量。 i的值位于“全局范围”中。 您运行的任何功能都可以访问i,就像现在一样。

当您的第二个for循环调用getCellBelow函数时,for循环和函数getCellBelow都会共享变量i。因此,i设置为1,然后调用函数getCellBelow。然后i被设置回零。所以你的for循环将永远持续下去。它永远不会达到1. getCellBelow函数不断将其设置为零。

for(i=0;i<2;i++){ //i gets set to zero and then incremented to 1
  var cellBelow = getCellBelow(i+1, Calendar_Display_values);//function called

然后在函数getCellBelow;

for(i=0; i<rangeArray.length; i++){//i is set to zero and until the array lengh

因此,i现在很容易大于一。您的循环for(i=0;i<2;i++){将停止。

您可以通过添加Logger.log('i: ' + i)语句,然后查看日志来查看。在“查看”菜单中,选择“运行代码后的日志”。

您应该在函数i

中定义function getCellBelow(day, rangeArray){

应该是:

function getCellBelow(day, rangeArray){
  var i;

因此,该函数中i的使用将仅限于该函数,并且不会影响该函数之外的i的任何其他值。