簡體   English   中英

onEdit 觸發器在谷歌表格中發送 email

[英]onEdit trigger to send email in google sheets

我的能力有限,請耐心等待。 我有以下任務。 我的第一個選項卡有學生姓名、時間戳和位置的日志。 我編寫了一個腳本,當最后一列輸入“指導顧問”時觸發 onEdit email。我正在嘗試更改腳本,以便可以執行以下任務。 我希望在將特定學生的姓名輸入第 1 列時觸發 onEdit email。但是,我不想每次都輸入腳本並鍵入我想要/需要觸發 email 的學生姓名列表。 我的思考過程是,我希望能夠有一個單獨的選項卡,其中包含我可以定期更新的名稱列表,並且當第 1 列中的單元格值與另一個選項卡中的名稱匹配時,它會觸發 email on那個編輯。
這是我的工作表https://docs.google.com/spreadsheets/d/1JiZXEtB3-B0C10TEy2CIFjdckhH3THNZaVo7lVsIg9k/edit?us的 url

這是迄今為止我的腳本的代碼,它在“指導顧問”上觸發 email 我知道它不是那么干凈。

function emailonEdit(e) {
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 

  // EVENT VARIABLES 
  let range = e.range; 
  let row = e.range.getRow(); 
  let col = e.range.getColumn(); 
  let cellValue = sheet.getActiveCell().getValue(); 

  let studentName = sheet.getRange(row,1).getValue(); 
  let user = Session.getActiveUser().getEmail(); 
  let cellLocation = sheet.getActiveCell().getA1Notation(); 
  let url = "https://docs.google.com/spreadsheets/d/1z7j1qB6JJ3q6IzGn8eL1R4-hJs8-GqMXlu9NpiakUts/edit#gid=0"

  if ( col == 6 && cellValue == "Guidance Counselor") {
    // Browser.msgBox('It works'); 
    MailApp.sendEmail(
      'fayj@bathwildcats.org',
      studentName + ' enroute to GUIDANCE!',
      url + '&range=' + cellLocation
    ); 
  }

     if ( col == 6 && cellValue == "Guidance Counselor") {
    // Browser.msgBox('It works'); 
    MailApp.sendEmail(
      'jimfay55@icloud.com',
      studentName + ' enroute to GUIDANCE!',
      url + '&range=' + cellLocation
    ); 
  }; 

  if ( col == 6 && cellValue == "Guidance Counselor") {
    // Browser.msgBox('It works'); 
    MailApp.sendEmail(
      'NavianceStudent2022@gmail.com',
      studentName + ' enroute to GUIDANCE!',
      url + '&range=' + cellLocation
    ); 
  }; 
 

}
function emailonEdit(e) {
  const sh = e.range.getSheet()
  const lsh = e.source.getSheetByName("student name list");
  const list = lsh.getRange(2,1,lsh.getLastRow() - 1).getDisplayValues().flat();
  let studentName = sh.getRange(e.range.rowStart,1).getValue(); 
  let user = Session.getActiveUser().getEmail(); 
  let cellLocation = e.range.getA1Notation(); 
  let url = "https://docs.google.com/spreadsheets/d/1z7j1qB6JJ3q6IzGn8eL1R4-hJs8-GqMXlu9NpiakUts/edit#gid=0"
  if ( e.range.columnStart == 6 && ~list.indexOf(studentName) && e.value == "Guidance Counselor") {
    MailApp.sendEmail('fayj@bathwildcats.org,NavianceStudent2022@gmail.com,jimfay55@icloud.com',studentName + ' enroute to GUIDANCE!',url + '&range=' + cellLocation ); 
  } 
}

替代答案

首先,您可以使用.toString().split()函數將學生列表從二維轉換為一維。 之后,您可以使用.includes() function 檢查學生姓名是否包含在您的列表中。

function emailonEdit(e) {
  var url = "https://docs.google.com/spreadsheets/d/1z7j1qB6JJ3q6IzGn8eL1R4-hJs8-GqMXlu9NpiakUts/edit#gid=0";
  var cellLocation = e.range.getA1Notation();
  var dataRange = e.range;
  var dataColumn = dataRange.getColumn();
  var dataRow = dataRange.getLastRow();
  var studentName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Log").getRange(dataRow,1).getValue();
  var studentListSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("List");
  var studentList = studentListSheet.getRange(2,1,studentListSheet.getLastRow()-1,1).getValues();
  var checkName = studentList.toString().split(",").includes(studentName); /**returns true if the student name is included in the List*/
  (dataColumn == 6 && checkName && e.value == "Guidance Counselor") ? MailApp.sendEmail("fayj@bathwildcats.org, jimfay55@icloud.com, NavianceStudent2022@gmail.com", studentName + ' enroute to GUIDANCE!', url + '&range=' + cellLocation) : SpreadsheetApp.getActiveSpreadsheet().toast("sending failed");
}

如果不滿足觸發器的條件,我還添加了一個toast() function 來發送彈出通知。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM