Javascript 为什么我的电子邮件会发送到第20行而不是第2行?

Javascript 为什么我的电子邮件会发送到第20行而不是第2行?,javascript,Javascript,我的代码似乎工作正常,除了第22行,它将“emailSent”值写入脚本所运行的Google电子表格的第20行,而不是电子表格的第2行,该行是唯一有数据的行。有什么想法吗 函数sendmails2(){ //尝试采用本教程中的代码https://developers.google.com/apps-script/articles/sending_emails //-相信我在哪里声明getRange工作有问题吗- var sheet=SpreadsheetApp.getActiveSheet()

我的代码似乎工作正常,除了第22行,它将“emailSent”值写入脚本所运行的Google电子表格的第20行,而不是电子表格的第2行,该行是唯一有数据的行。有什么想法吗

函数sendmails2(){
//尝试采用本教程中的代码https://developers.google.com/apps-script/articles/sending_emails
//-相信我在哪里声明getRange工作有问题吗-
var sheet=SpreadsheetApp.getActiveSheet();
var startRow=2;//要处理的第一行数据
var lastRow=40;//要处理的最后一行数据
//获取单元格A1:B10002的范围
var dataRange=sheet.getRange(startRow,1,lastRow,10)
//获取范围中每行的值。
var data=dataRange.getValues();
var i=数据长度;
对于(数据中的i){
var行=数据[i];
var emailAddress=row[7];//在某一点上引发了错误
var isEmailSent=第[9]行//
var partTimeApproved=行[0]
if(partTimeApproved!=“”){//禁止向未经批准的行发送电子邮件。由于某些原因,='Y'不起作用,但是!=''起作用//…或者是否起作用
如果(isEmailSent=''){//阻止发送重复项和向未经批准的行发送电子邮件
var subject=“电子邮件主题测试”;
var message=“电子邮件正文测试”;//标准字符串
MailApp.sendmail(电子邮件地址、主题、消息);
sheet.getRange(startRow+i,10).setValue('emailSent');//这不起作用:-将startRow+i替换为行-
//确保立即更新单元格,以防脚本中断
SpreadsheetApp.flush();
}
}
}
}
首先

var i = data.length; <-- makes no sense
for (i in data) {    <-- since you override i here
把它转换成一个数字

> 2 + parseInt("0", 10)
2
因此,在守则中:

getrange(startRow + parseInt(i, 10), 10).setValue('emailSent'); 

您是否检查了
i
在该点的值?我猜是18,因为
startRow+I->2+18->20
Marc B谢谢你的回复!我同意,但怎么可能是18岁?它来自:var i=data.length;对于(数据中的i){既然只有一行数据,它不应该停在i=2吗?不,它可以是一个任意值,因为在下一行中,您正在为(数据中的i)执行
。例如,您正在使用for()中的任何内容来破坏长度值循环。我的代码似乎正在使用此修订版。我很感谢您对答案的编辑扩展,因为我很高兴有机会学习。我不理解您的前两条评论,即“var I=data.length”没有意义,因为我用“for(数据中的I)”覆盖了I{但是,您似乎是正确的,因为代码确实在没有以“var”开头的行的情况下工作。这毫无意义,因为您在中没有使用长度。下一行您只是用新内容覆盖该值。
getrange(startRow + parseInt(i, 10), 10).setValue('emailSent');