Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于循环跳过项_Javascript_Google Apps Script_Google Apps - Fatal编程技术网

Javascript 用于循环跳过项

Javascript 用于循环跳过项,javascript,google-apps-script,google-apps,Javascript,Google Apps Script,Google Apps,我有一个GoogleApps脚本,它通过For循环从GoogleApps表中提取数据,然后将每一行放入一个数组中,准备导出到外部API。我的问题是脚本跳过了一些条目,我不明白为什么 以下是完整的代码: function prepEmails() { var ss = SpreadsheetApp.getActive(); var s = ss.getSheetByName("Emails"); var sLastRow = s.getLastRow();

我有一个GoogleApps脚本,它通过For循环从GoogleApps表中提取数据,然后将每一行放入一个数组中,准备导出到外部API。我的问题是脚本跳过了一些条目,我不明白为什么

以下是完整的代码:

function prepEmails() {
  var ss       = SpreadsheetApp.getActive();
  var s        = ss.getSheetByName("Emails");
  var sLastRow = s.getLastRow();
  var scriptProperties = PropertiesService.getScriptProperties();
  var logCount = scriptProperties.getProperty('EmailCount');
  Logger.log("63 logCount = "+logCount);

  var url          = "https://apitoexportto.com";
  var recordType   = "email";
  var logKey       = "mailCount"
  var activityDesc = "######"    

  if (logCount === null) {
     scriptProperties.setProperty('EmailCount', 0);
     logCount = 0;
  }

  Logger.log("68 logCount = "+logCount);
  var msgs = sLastRow - logCount;
  var arr     = new Array();

  for (var i=0; i<msgs-1; i++) {
    Logger.log("78 inside FOR loop");
    var nextRow = logCount+1; //+1 to skip header row
    var msg     = s.getRange(nextRow+1, 1, 1, 6).getValues(); //+1 to skip to next row

    var payload = {
      'type' : "TimeEntry",
      'matter_id' : msg[0][0],
      'price' : msg[0][1],
      'date' : msg[0][2],
      'note' : msg[0][3],
      'quantity' : msg[0][4],
      'activity_description_id': activityDesc
    };

    arr.push(payload);
    var logCount = parseInt(logCount)+1;
  }
  Logger.log("95 logCount = "+logCount);

  if (i>0) {  
    exportEmails(url, recordType, arr, logKey, activityDesc);
  }
}
如您所见,它开始从第98行获取值。这是基于logCount的预期结果(一个脚本属性,跟踪导出的总数,并根据该数字在适当的行中拾取)。但随后它跳过99和100,从第101行抓起。这些行中的数据没有什么异常。(这些行不是空白的,也不是什么奇怪的东西)。我确认第99行和第100行的值没有通过下一个函数导出。他们只是被跳过了

我对javascript比较陌生(完全自学),但对我来说这似乎是一个简单的for循环。无
继续
s,无
中断
s,无
返回
s。我不明白它会像这样跳到哪里或为什么


谁能告诉我为什么这些行会被跳过

我想更改这一行:

var nextRow = logCount+1; //+1 to skip header row
致:

并在
循环的
上方为
nextRow
提供一个初始值:

var nextRow = logCount - 1; //initialize nextRow

for (var i=0; i<msgs-1; i++) {
    Logger.log("78 inside FOR loop. Value of nextRow: " + nextRow);
    nextRow = nextRow + 1; //+1 to skip header row
    var msg     = s.getRange(nextRow+1, 1, 1, 6).getValues(); //+1 to skip to next row

    var payload = {
      'type' : "TimeEntry",
      'matter_id' : msg[0][0],
      'price' : msg[0][1],
      'date' : msg[0][2],
      'note' : msg[0][3],
      'quantity' : msg[0][4],
      'activity_description_id': activityDesc
    };
var nextRow=logCount-1//初始化下一步

对于(var i=0;如果
inside for loop
消息报告了
logCount
的值,那么对于(var i=0;iI)没有帮助。为什么需要
parseInt(logCount)
在循环内部呢?我会将其添加到日志中。我将其更改为parseInt,因为它很可能正在执行字符串+整数操作,从而导致一个糟糕的结果。(例如98.01111111)。我最终按照您的建议将
var nextRow
从循环中移出。我无法重新创建错误/跳过,因此希望它得到解决。我真的不明白它为什么得到解决,但我正在单击绿色的大复选标记并继续!非常感谢。:)
nextRow = nextRow + 1; //+1 to skip header row
var nextRow = logCount - 1; //initialize nextRow

for (var i=0; i<msgs-1; i++) {
    Logger.log("78 inside FOR loop. Value of nextRow: " + nextRow);
    nextRow = nextRow + 1; //+1 to skip header row
    var msg     = s.getRange(nextRow+1, 1, 1, 6).getValues(); //+1 to skip to next row

    var payload = {
      'type' : "TimeEntry",
      'matter_id' : msg[0][0],
      'price' : msg[0][1],
      'date' : msg[0][2],
      'note' : msg[0][3],
      'quantity' : msg[0][4],
      'activity_description_id': activityDesc
    };