1

私は、学生データのスプレッドシートを1行ずつ探し、学生とその親に電子メールを送信するスクリプトを作成しようとしていますスプレッドシートの列は、学生ID、生徒の名前、生徒のメールアドレス、親メールアドレス、等級です。スプレッドシートには30行あります。最大25行を使用し、残りは空白にします。一部の親電子メールアドレスフィールドは空白のままになりますが、これはコード内で説明されています。すべての生徒に電子メールアドレスがあります。Google Appsスプレッドシートスクリプトは必ずしも反復処理を終了するとは限りません。そうでなければ正常に動作します

スクリプトは実際には正常に動作しますが、必要なすべての反復処理が必ずしも実行されるわけではありません。それは毎回違う回数の反復の後で止まります - 時々それはすべてを行いますが、通常はしません。停止してもエラーや何もないので、メッセージボックスのポップアップや学生へのメール送信が停止します。

すべての行を実行する前に実行を停止する理由は何ですか?

ここでは、コードです:

function onOpen(){ 
    loadMenu(); 
} 

function loadMenu() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    ss.addMenu("F-Watch Emailer", [{"name":"Send Emails", "functionName":"sendEmails"}]); 
} 

function sendEmails() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var range = sheet.getRange("B2:E30"); 
    var data = range.getValues(); 
    //Browser.msgBox(data); 

    for (var i = 0; i < 30; i++){ 
    //set variables 
    var row = data[i]; 
    var emailAddress = row[1]; 
    var parentEmailAddress = row[2]; 
    var grade = row[3]; 

    Browser.msgBox("email = "+emailAddress); 

    //email student if necessary, return true or false 
    if(emailAddress !== ""){ 
     var emailSent = sendStudentEmail(emailAddress, grade);  
    } 
    else{ 
     //Browser.msgBox("Student Email Field " + (i + 1) + " is Empty"); 
    } 

    //email parent if necessary, return true or false 
    if(parentEmailAddress !== ""){ 
     var parentEmailSent = sendParentEmail(parentEmailAddress, grade);  
    } 
    else{ 
     //Browser.msgBox("Parent Email Field " + (i + 1) + " is Empty"); 
    } 
    } 
} 

function sendStudentEmail(emailAddress, grade){ 
    if(grade < 60){ 
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class"; 
    var body = "Attention Students: If you are receiving this automated email, your term grade is currently below 60. Please check iPass and speak to me to make up any late assignments (please refer to my Late Work Policy). If you have any questions, feel free to email me.Have a good day, - Mr. L Note: This is the first in a weekly series of automated emails, and it's in beta. Please forgive any formatting issues. Also, beginning next week, this email will be sent to parents/guardians as well."; 
    //MailApp.sendEmail(emailAddress, subject, body); 
    //Browser.msgBox("Email sent to " + emailAddress); 
    return true; 
    } 
    else{ 
    //Browser.msgBox("Email not sent to " + emailAddress); 
    return false; 
    } 
} 

function sendParentEmail(parentEmailAddress, grade){ 
    if(grade < 60){ 
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class"; 
    var body = "Parent Email Text"; 
    //MailApp.sendEmail(emailAddress, subject, body); 
    //Browser.msgBox("Email sent to " + parentEmailAddress); 
    return true; 
    } 
    else{ 
    //Browser.msgBox("Email not sent to " + emailAddress); 
    return false; 
    } 
} 

答えて

0

は、デバッガを使用して失敗したためのループをステップ実行してください。

スクリプトエディタで行番号の近くをダブルクリックすると、コード内の任意の行に停止を設定できます。デバッガは、スパイダーのようなアイコンをクリックすると実行されます。

0

多くの文書化されていない制限があります。時にはUtilities.Sleep(ms)が助けることができます

関連する問題