if for循环引用中的语句递增变量

时间:2014-12-04 12:47:55

标签: google-apps-script

作为编码的新手,我用我的代码遇到了这个问题: 我使用Google App Script [编辑:更正了Google App Engine到Google App Script]来浏览时间戳列表并过滤当前月份的邮票。因此,我加载电子表格,相应的表格,并将所有行的数据作为对象。

在下一步中,我会浏览对象的所有元素,并检查它们是否包含当前日期。

    /* Initial data */  

  var email = "name@domain.com";  
  var spreadsheet = SpreadsheetApp.openById("1bN7PTOa6PwryVvcGxzDxuNVkeZMRwYKAGFnQvxJ_0nU");
  var tasklist = spreadsheet.getSheets()[0].getDataRange(); 
  var tasks = tasklist.getValues();
  var tasksnum = tasklist.getNumRows();

  Logger.log(tasks[7][2]); //Console returns "01.12.2014"
  Logger.log(tasks[7][2].indexOf(month)); //Console returns "12.2014"

/* Filter tasks by month */  

  for (var i = 1; i < 9; i++) {  
    if (tasks[i][2].indexOf(month) >= 0) {
      Logger.log(tasks[i]);
    }
    else {
      return;
    }
  }

让我发疯的是:如上所述,for循环不起作用。但如果我像这样改变它

if (tasks[7][2].indexOf(month) >= o) {

它就像一个魅力。这就是我无法得到的。我应该增加到9,所以在某个时候应该是7。至少那时,条件应为true,循环应返回日志。

我错过了什么?

提前谢谢大家。

ps:如果我只是遵循如何实现该功能的错误路径,请告诉我。 ps2:我认为我的问题标题有点神秘。如果你有一个更好的想法,我很乐意改变它。

2 个答案:

答案 0 :(得分:0)

我不确定month变量中的内容应该是什么,但我建议构建一个字符串以匹配您的日期格式并进行字符串比较,而不是使用indexOf()策略#&#39} 39;重新尝试。此代码经过测试,并且确实如此:

function test() {
  /* Initial data */  

  var spreadsheet = SpreadsheetApp.openById("");
  var tasklist = spreadsheet.getSheets()[0].getDataRange(); 
  var tasks = tasklist.getValues();
  var tasksnum = tasklist.getNumRows();

  /* Filter tasks by month */  
  var today = Utilities.formatDate(
    new Date(), 
    spreadsheet.getSpreadsheetTimeZone(), 
    "dd.MM.yyyy"
  );

  for(var i=1; i<9; i++){  
    if (tasks[i][2] == today){
      Logger.log(tasks[i]);
    }
  }
}

答案 1 :(得分:0)

原始代码不起作用的原因是由于else块中的return语句。返回立即退出函数,因此你的循环永远不会超过你的IF的第一个“错误”。

删除“return”(或完全保留else块),您的代码应该可以正常工作。