2012-07-19 212 views
0

因此,我有一個Google表單供給Google文檔電子表格。這種形式是爲我們的城市的新人註冊我們的新人組。撰寫Google Apps腳本,向發送電子郵件的用戶發送電子郵件,滿足其他標準

我想編寫一個Google Apps腳本,它將以編程方式向發送提醒電子郵件的用戶在提交表單10天后未支付其費用。

應該很簡單吧?

這裏的節錄出來的個人數據電子表格的副本的鏈接:用某種比較來

https://docs.google.com/spreadsheet/ccc?key=0AjsoIob8dJfodG9WN0ZmWUE1ek9rc3JrVFpDQ0J0OGc

好像我應該能夠使用A列(「時間戳」)現在()確定10天的部分。並且爲了得到未繳納的會費,只需要D列不等於是。顯然,收件人的電子郵件地址在X欄中。

我已經編寫了一個腳本來向收件人「在表單提交」上發送確認電子郵件。所以我對MailApp.sendEmail類感到滿意。

如果您發現「Updaid」選項卡,您會發現我已經使用查詢來解決那些未付款的人。

但我不知道如何讓MailApp.sendEmail類對已經在工作表中的數據進行操作。當提交表單時不會自動觸發。

而且我不知道如何使我的查詢適應10天前的位。

而我甚至不確定我應該使用此應用程序的查詢。

任何人都可以對我的路?

謝謝。

回答

2

最簡單的方法知道的日期是10天之後可能是數毫秒!

我知道這聽起來像笑話但它不是;-)

實施例:

function test(){ 
var today = new Date(); 
var tendaysBefore = new Date(today.getTime()-10*24*60*60*1000);// 10 times 24 hours 
Logger.log(today+' is 10 later than '+tendaysBefore); 
} 

的方法的getTime()返回一個從基準日期的毫秒數,它將工作直到2070所以我想這是可以放心使用,現在;-)

觸發問題在科尼利厄斯的回答已經解決了,THX

編輯:這裏是一個可能的代碼做你想要什麼:(你的表測試)

var sh = SpreadsheetApp.getActiveSheet(); 
var ss = SpreadsheetApp.getActiveSpreadsheet();// replace these with openbyId''ID') and getSheetByName(name) when you run it with trigger since the sheet wil be 'closed' 
var lastrow = ss.getLastRow(); 

function onOpen() { 
    var menuEntries = [ {name: "check late paiments", functionName: "test"}, 
         {name: "send mails to tagged users", functionName: "mailunpaid"}, 
            ]; 
    ss.addMenu("custom functions",menuEntries);// custom menu 
    } 

function test(){ // check column D and set it to "no" if not paid 
    var paidcol = sh.getRange(2, 4, lastrow-1, 1).getValues();//read only col D 
    for(nn=0;nn<paidcol.length;++nn){ 
     if(paidcol[nn][0].toString().toLowerCase().match('yes')!='yes'){ 
     paidcol[nn][0]='no' 
     } 
     } 
     sh.getRange(2, 4, lastrow-1, 1).setValues(paidcol);// write back to sheet 
     } 

function mailunpaid(){ 
    var data = sh.getDataRange().getValues();//read the whole sheet in an array, col D is idx3, timestamp is idx0 email is idx 23 
    var today = new Date(); 
    var tendaysBefore = new Date(today.getTime()-10*24*60*60*1000);// 10 times 24 hours 
     for (nn=1;nn<data.length;++nn){ // iterate from row 2 to end ie idx 0 to last 
    // Logger.log(data[nn][3]+' '+data[nn][0]) 
     if(data[nn][0]<=tendaysBefore && data[nn][3]=='no'){ 
    // MailApp.sendEmail(data[nn][23], 'subject', 'body'); // you have to define the mail subject & content somewhere ;-) and uncomment when finished your tests 
    Logger.log('row '+Number(nn+1)+' = to send because '+data[nn][0]) 
     sh.getRange(nn+1,4).setValue('SENT');// tag this user to know that mail has been sent to avoid multiple emails 
      } 
     } 
    } 

注意,我在2個功能清晰分裂的代碼,但是當它作爲觸發運行,你應該將兩種功能組合在一起以獲得自動檢查...