2017-09-06 67 views
0

我有這樣的電子表格 Example Sheet根據單元格中的日期/時間在Google表格中自動生成電子郵件?

隨着人們在自動時間戳進入塔的標誌,L列然後計算的日期/時間在未來12小時。

我想要做的是讓工作表生成一個自動發送電子郵件到列K中的指定時間的地址列L -ONLY IF-該人沒有進入「時間已註銷「。

基本上,人們擅長登錄,但總是忘記退出。 我希望自動提醒電子郵件,讓他們回到工作表,並把註銷時間。如果沒有,他們會收到電子郵件提醒。

電子郵件的標準主題是:「Please Remember to Sign Out」 電子郵件的標準主體是:「看起來你可能沒有登出,請點擊此鏈接立即註銷「

即使表單未打開,我是否可以使用時間或分鐘觸發器來使腳本生成?

我很好地編寫非常A-B-C的腳本,但是這個超出了我的範圍,我搜索的例子並沒有涵蓋這個場景。

在此先感謝您的幫助。

+0

您可能想要檢查此[相關SO帖子](https://stackoverflow.com/a/21744490/5995040)代碼實現。然後使用[時間驅動觸發器](https://developers.google.com/apps-script/guides/triggers/installable#time-driven_triggers)這可以讓您的腳本在特定時間執行或重複執行。此外還要注意Apps Script服務每日對[配額](https://developers.google.com/apps-script/guides/services/quotas)施加的限制以及對某些功能的嚴格限制。希望這可以幫助。 –

+0

我試圖調整該代碼以適應我的需求,但我一直遇到問題。真正難以逾越的部分是僅在列I中沒有數據輸入時才發送電子郵件。我不確定如果/然後在其餘代碼的上下文中編寫該邏輯。我會一直搞亂它,但是我沒有信心,如果沒有更好的編碼器的幫助,我可以解決它。 –

+0

也許更簡單的解決方案是使用時鐘觸發器上的腳本,每3小時運行一次(比如說)並在電子郵件邏輯中構建是否填充了各個字段以及腳本開始運行的時間。每次用戶登錄時,都會比編寫新的時鐘觸發器更容易實現。它不會提供您所期望的響應級別,但是這對於此目的是否足夠好?請張貼一些代碼,以便我們可以檢查邏輯和建議。 –

回答

0

另一個電子郵件問題

這是完全未經測試,但寫入您的規範。我希望它適合你。您將需要運行安裝我的觸發器和腳本本身來授權它。您還應該創建一個通常爲空的列,直到您發送一封電子郵件,然後填寫一些內容。在if語句中添加一些內容,例如&& vA[i][column number - 1]以及sendEmail放入類似內容後。 sh.getRange(i+1,column number).setValue('Dont send again');,然後下次運行該腳本時,它不會將電子郵件發送給已經收到郵件的人。

function sendEmailToThoseWhoHaveNotSignedOut() 
{ 
    var ss=SpreadsheetApp.getActive(); 
    var sh=ss.getSheetByName('Sheet1'); 
    var rg=sh.getDataRange(); 
    var vA=rg.getValues(); 
    var lastHeaderRow=1; 
    var now=new Date(); 
    var rdq=MailApp.getRemainingDailyQuota(); 
    for(var i=lastHeaderRow;i<vA.length;i++) 
    { 
    if(new Date(vA[i][11]).valueOf()<now.valueOf() && !vA[i][8] && vA[i][10] && rdq>0) 
    { 
     MailApp.sendEmail(vA[i][10], 'Please Remember to Sign Out', 'It appears you may not have signed out, please click this link to sign out now.') 
    } 
    } 
} 

function setUpMyTrigger() 
{ 
    if(!isTrigger('sendEmailToThoseWhoHaveNotSignedOut'))//This prevents you from setting up more than one trigger at a time for the same function. 
    { 
    ScriptApp.newTrigger('sendEmailToThoseWhoHaveNotSignedOut').timeBased().everyHours(1).create(); 
    } 
} 

function isTrigger(funcName) 
{ 
    var r=false; 
    if(funcName) 
    { 
    var allTriggers=ScriptApp.getProjectTriggers(); 
    var allHandlers=[]; 
    for(var i=0;i<allTriggers.length;i++) 
    { 
     allHandlers.push(allTriggers[i].getHandlerFunction()); 
    } 
    if(allHandlers.indexOf(funcName)>-1) 
    { 
     r=true; 
    } 
    } 
    return r; 
} 
+0

庫珀,感謝你的腳本。它幾乎爲我工作。我對列順序等進行了輕微的調整,現在它會每小時發送一次很好的電子郵件。 我現在或者至少據我所知道的問題是,無論是否有「簽出」時間輸入到單元格中,它都會發送電子郵件。此外,它只發送到底部的電子郵件。當我盯着代碼,我無法弄清楚要修改這個參數。 所以現在它每小時發送一封電子郵件到上面示例表中列表中的第二個名字。 –

+0

***糾正,無論簽名時間列中是否有登出時間,它都會發送到電子郵件或「全部」電子郵件。我該如何解決這個問題,以便正確識別該列/單元格中的時間,並且只有在電子郵件爲空時才發送電子郵件? –

+0

您的示例工作表是否反映了您在上面提到的列調整。 – Cooper

相關問題