2012-07-10 36 views
0

我一直在努力這個腳本很長一段時間,它是谷歌應用程序腳本,它會自動發送電子郵件警報提供的電子郵件,我腳本觸發每隔1分鐘運行一次。自動發送電子郵件谷歌應用腳​​本:做條件

所以如果單元總數大於201,它會發送電子郵件給用戶。 但問題是它發送電子郵件每分鐘腳本運行。

我需要編碼方面的幫助,如果電子郵件已經發送一次,它不會再次發送,除非單元格值再次小於201並且回到大於201, 我正在考慮製作一個單元格,它將包含文字「已發送」或「未發送」

如果說「未發送」讓電子郵件代碼在總數大於201時運行 如果說「發送」且總數大於201不讓電子郵件代碼跑..

我知道我並不是每個人都清楚,但它已經很難得到這個幫助。 這是代碼。

如果這個工程,我敢肯定很多人可以使用這個腳本的使用。

function sendEmail(email_address, email_subject, email_message) { 
    MailApp.sendEmail(email_address, email_subject, email_message); 
} 

function test_sendEmail() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var cell = sheet.setActiveCell('A2'); 
    var criterion_cutoff = 201; 
    var i = 0; 
    var addr; 
    var subj; 
    var msg; 


    do { 
    addr = cell.offset(i,0).getValue(); 
    subj = cell.offset(i,1).getValue(); 
    msg = cell.offset(i,2).getValue(); 
    criterion = cell.offset(i,3).getValue(); 

    if(criterion == criterion_cutoff) { 
     sendEmail(addr,subj,msg); 
    // Browser.msgBox('Sending email to: ' + addr); 
    } 
    i++; 
     } while(cell.offset(i, 0).getValue().length > 0) 


    Browser.msgBox('Done!'); 
} 


讓我加入,如果其他條件外做的思考,同時

if(SpreadsheetApp.getActiveSheet().getRange(21,6).getValue() != 'Not Sent') { 
    do { 
     //same stuff as above 
    } while(condition) 

    } 

    else 
     //don't know wht else to do in else condtion so just using googleclock 
     SpreadsheetApp.getActiveSheet().getRange(2,7).setValue('=GoogleClock()') 
+0

從閱讀您的代碼,您似乎檢查整列的單元格,而不是一個。如果有人遇到過,電子郵件將被髮送,那麼您不需要再檢查其他單元格(在列中)了? – 2012-07-10 13:58:31

+0

@HenriqueAbreu是和否,那裏有3 X 3列,第一列有電子郵件,第二個有主題,第三個有味精。所以你可以把它想成3種不同的檢查條件應用程序,我不必全部使用3.我只檢查第2行..我的代碼只是工作問題是我不想繼續發送電子郵件,如果有已經發送過一次,並且一次只有當信元仍然大於201 ..如果它回落到低於201,它應該再次發送。 – Mowgli 2012-07-10 14:03:45

+0

@HenriqueAbreu我自己幾乎找到了解決方案,我會在這裏發佈它,也有人需要使用它。 – Mowgli 2012-07-10 14:04:25

回答

0

我想我已經想通了我自己。我想分享我的解決方案,以便其他人可以使用它。

所以我已經添加2如果別的condtion 第一個將檢查單元格的值是如果它小於201不是設置somecell例F5 =未發送

另一個如果其他環路,將檢查 如果F5的價值!=發送和單元格的值== 201 比它會運行電子郵件代碼 並運行該電子郵件的代碼將細胞F5設置爲發送

所以下一次循環之後再次運行它不會發再次發送電子郵件,除非單元格的值爲

但是這有一個小問題,它只適用於3行中的第1行,你可以通過添加更多的條件來使它成爲所有3行,我不需要它,所以我不擔心它。

function sendEmail(email_address, email_subject, email_message) { 
    MailApp.sendEmail(email_address, email_subject, email_message); 
} 

function test_sendEmail() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var cell = sheet.setActiveCell('A2'); 
    var criterion_cutoff = 201; 
    var i = 0; 
    var addr; 
    var subj; 
    var msg; 

    if((SpreadsheetApp.getActiveSheet().getRange(2,4).getValue() < '201')) { 
    SpreadsheetApp.getActiveSheet().getRange(2,6).setValue('Not Sent'); 
    } 
    else 
    if((SpreadsheetApp.getActiveSheet().getRange(2,6).getValue() != 'Sent') && (SpreadsheetApp.getActiveSheet().getRange(2,4).getValue() == '201')) { 
    do { 
    addr = cell.offset(i,0).getValue(); 
    subj = cell.offset(i,1).getValue(); 
    msg = cell.offset(i,2).getValue(); 
    criterion = cell.offset(i,3).getValue(); 

    if(criterion == criterion_cutoff) { 
     sendEmail(addr,subj,msg); 
    // Browser.msgBox('Sending email to: ' + addr); 
     SpreadsheetApp.getActiveSheet().getRange(2,6).setValue('Sent'); 
    } 
    i++; 
     } while(cell.offset(i, 0).getValue().length > 0) 

    Browser.msgBox('Done!'); 
} 
    } 
相關問題