Javascript 用于循环跳过项
我有一个GoogleApps脚本,它通过For循环从GoogleApps表中提取数据,然后将每一行放入一个数组中,准备导出到外部API。我的问题是脚本跳过了一些条目,我不明白为什么 以下是完整的代码: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();
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
};