2016-08-01 11 views
1

私は、スプレッドシートをチェックインした後、毎日2つの条件で電子メールを送信するようにスクリプトを作成しようとしています。 Trueの最初の条件の場合、電子メールへのデータは「subject1」になり、それ以外の場合は「subject2」になります。スクリプトのsendNotificationが正しく機能しない

手動で実行するとスクリプトは正常に動作しますが、トリガーによって電子メールで送信したい値が本体に表示されません。

手作業であれば何が間違っているのか分かりませんが、完璧に動作します。 トリガーは「時間駆動/時間/ 12時間ごと」です。 誰でも助けてくれますか?

これはコードである:このラインで

function sendNotificationD() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cell = ss.getActiveCell().getA1Notation(); 
    var cellvalue = ss.getActiveCell().getValue().toString(); 

    var column = ss.getRange('o13'); 
    var cell = sheet.getRange('o13'); 
    var value = column.getValue(); 
    var emailSheet = ss.getSheetByName("totais"); 
    var emails = emailSheet.getRange("q1:s1").getValues(); 

    var range_bill_com = sheet.getRange('o13'); 

    if (range_bill_com.getValue() !='CONGRATS'){ 
    var recipients = emails; 
    var message = ''; 
    var subject = 'subject1 here'; 
    var body = 'IMPORTANT: ' + '\n\n' + 'your goal is' + ' ' + value; 
    MailApp.sendEmail(recipients, subject, body); 
    } 

    if (range_bill_com.getValue() =='CONGRATS'){ 
    var recipients = emails; 
    var message = ''; 
    var subject = 'subject2 here'; 
    var body = 'you have reached your goal'; 
    MailApp.sendEmail(recipients, subject, body); 
    } 
}; 
+0

トリガーから関数を実行している場合は、アクティブなシートを取得する代わりに、シートを名前で明示的に設定してみてください。 –

答えて

2

var sheet = ss.getActiveSheet(); 

ユーザがそれを開いたときにスプレッドシートUIに表示されているアクティブなシートを取得getActiveSheet()方法が、時間駆動のトリガから実行されているときはアクティブシートがないので、シートを指定する必要があります。getSheetByName()またはgetSheets()を使用してください。

var sheet = ss.getSheetByName("Sheet1"); 

または

var sheet = ss.getSheets()[0]; // Index of the tab, 0 will return the first one 

手動またはトリガーからそれを発射する場合、関数はまだ動作します。

+0

ありがとう!!!!それは今完全に仕事です!!!! –

関連する問題