For loop 为什么在第二个循环中两次得到同一行?
下面的代码运行时没有明显的错误,但尽管我已经查找了所有可能的原因,但我找不到它迭代正确行、将其标记为已处理(“Sim”)的原因,从2º迭代开始,它得到新行,但重复已迭代的其他行For loop 为什么在第二个循环中两次得到同一行?,for-loop,google-apps-script,google-sheets,For Loop,Google Apps Script,Google Sheets,下面的代码运行时没有明显的错误,但尽管我已经查找了所有可能的原因,但我找不到它迭代正确行、将其标记为已处理(“Sim”)的原因,从2º迭代开始,它得到新行,但重复已迭代的其他行 function formToData() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var ss = sheet.getSheetByName("Form Responses 1"); var targetSheet = s
function formToData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var ss = sheet.getSheetByName("Form Responses 1");
var targetSheet = sheet.getSheetByName("Cadastro de Cliente");
var StartRow = 2;
var RowRange = ss.getLastRow() - StartRow + 1;
var WholeRange = ss.getRange(StartRow, 1, RowRange, 30);
var AllValues = WholeRange.getValues();
var message = "";
for (var i = 0; i < AllValues.length; i++) {
var currentRow = AllValues[i];
//if row has been sent, then continue to next iteration
if (currentRow[0] != "" && currentRow[29] != "Sim") {
//set the row to look at
var setRow = parseInt(i) + StartRow;
var data = currentRow[0];
var dataFormatted = Utilities.formatDate(data, SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "dd/MM/yyyy', às 'HH:mm") + "hs";
//set HTML template for information
message +=
"<p><b>Data: </b>" + dataFormatted + "</p>" +
"<p><b>Unidade: </b>" + currentRow[1] + "</p>"
//mark row as "sent"
ss.getRange(setRow, 30).setValue("Sim");
var values = targetSheet.getRange("A:A").getValues();
var maxIndex = values.reduce(function (maxIndex, row, index) {
return row[0] === "" ? maxIndex : index;
}, 0);
targetSheet.getRange(maxIndex + 2, 1, 1, 30)
.setNumberFormat("@")
.setValues([currentRow]);
var sendTo = "email";
var subject = "Cadastro de cliente novo";
if (message) {
MailApp.sendEmail({
to: sendTo,
subject: subject,
name: "Comercial - Emape",
htmlBody: message,
});
}
}
}//For loop closes
}
函数formToData(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
var ss=sheet.getSheetByName(“表单响应1”);
var targetSheet=sheet.getSheetByName(“客户卡”);
var StartRow=2;
var RowRange=ss.getLastRow()-StartRow+1;
var WholeRange=ss.getRange(StartRow,1,RowRange,30);
var AllValues=WholeRange.getValues();
var message=“”;
对于(var i=0;i”+
Unidade:“+currentRow[1]+””
//将行标记为“已发送”
ss.getRange(setRow,30).setValue(“Sim”);
var values=targetSheet.getRange(“A:A”).getValues();
var maxIndex=values.reduce(函数(maxIndex,行,索引){
返回行[0]=“maxIndex:索引;
}, 0);
targetSheet.getRange(最大索引+2,1,1,30)
.setNumberFormat(“@”)
.setValues([currentRow]);
var sendTo=“电子邮件”;
var subject=“新客户卡数据”;
如果(信息){
MailApp.sendmail({
收件人:sendTo,
主题:主题,,
名称:“Comercial-Emape”,
htmlBody:message,
});
}
}
}//For循环结束
}
如果您能帮我找到缺陷,我将通知您。我尝试复制此行为,但是,在静态工作表上,脚本按预期执行:
此外,检查工作表和表格的内容是否存在“Sim卡“标记可能被新的或编辑的表单数据覆盖,可能工作表插入了30列而不是29列或更少。直到有人花时间在他的示例数据集上运行此代码。如果您有时间自己检查代码,我建议您使用
console.log
变量来监视for循环中的迭代步骤。通过这种方式,您可以看到代码失败的地方并找到错误。例如,console.log(currentRow)
。如果您认为要在相同的行上再次迭代,则表示此变量的值没有正确更改。你可以找出哪个i
it这样做,看看你的工作表是否有问题。打印值是调试任何程序中代码的最佳方式。语言。你好@Marios!我已经这样做了,currentRow logged是正确的。我认为在组成mesaqge和设置值(“Sim”)之间可能存在错误。。。我甚至尝试过电子表格.flush(),但它没有解决。