2016-03-07 41 views
1

例如,如果在A列內採取了某項操作,則會將電子郵件發送到E列中的相應電子郵件地址。我們使用Google表格向我們的客戶發送路線時間表如果我們的現場工作人員在前往客戶的路上,將會產生一封電子郵件,這將非常有幫助。我已經看到使用腳本這樣的選項,但沒有一個發送到不同的電子郵件地址,取決於編輯的單元格。當從下拉列表中選擇某些數據時發送電子郵件

最好的辦法是有一個數據驗證下拉菜單,狀態爲「途中,服務,完成」。因此,一旦狀態設置爲「途中」,電子郵件通知將發送到另一行中的地址。

下面是腳本到目前爲止我有:

function sendEmail() { 
    // return all data in active spreadsheet 
    var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues() 
    for (i in values.length) { //iterate over each row 
     // get value of column 1 (aka B) for this row 
     // this is the conditional cell for emailing 
     var data= values[i][1]; 
     // get email address from column 2 (aka C) 
     var emailAddress = values[i][2]; 
     var subject = "We are en route with your order" 
     var message = "Our crew will arrive in 5 minutes"; 
     // if data cell equals En Route, send email for this row 
     if (data = "En Route") ;{ 
      MailApp.sendEmail(emailAddress, subject, message); 
     } 
    } 
} 

我猜有可能需要在一些地方是onEdit()函數在那裏。

回答

1

由於simple triggers are not authorized to do this,您不能發送電子郵件從onEdit()。相反,您應該創建一個可安裝的觸發器,例如通過在腳本編輯器中選擇資源>此項目的觸發器。將其設置爲「從電子表格中編輯」。另外,您的方法(每次編輯掃描整個工作表,並將電子郵件發送給任何匹配「En Route」的人)可能會導致多個電子郵件發送給同一個人:每次編輯時他們的單元格是「途中」,他們會收到一封電子郵件。你不想那樣。相反,請使用event object,它指出編輯的位置和輸入的新值。這是該功能的外觀。

注意,在Google Apps腳本方法行/列數是基於1:2欄是B等

function emailOnRoute(e) { 
    if (e.value == 'En Route' && e.range.getColumn() == 2) { 
    var row = e.range.getRow(); 
    var sheet = e.range.getSheet(); 
    var emailAddress = sheet.getRange(row, 3).getValue(); 
    var subject = "We are en route with your order" 
    var message = "Our crew will arrive in 5 minutes"; 
    MailApp.sendEmail(emailAddress, subject, message); 
    } 
} 
+0

我嘗試了建議的代碼並運行該腳本時,得到如下錯誤信息:「 TypeError:無法讀取未定義的屬性「值」(第2行,文件「代碼」)「 –

+0

您是手動運行(不會工作),還是觸發編輯觸發? – 2016-03-14 20:24:20

相關問題