如何在特定单元格更改时触发Google表格功能或由时间触发 摘要说明摘要2 说明从用户界面创建触发器参考

问题描述

我正在尝试在表格上的单元格更改时触发功能(发送电子邮件)。

目前,我的代码如下。

  function RealtimeFeedbackdue() {

  var remainingHoursRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("F5"); 
var remainingHours = remainingHoursRange.getValue();
var studentNameRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B1"); 
var studentName = studentNameRange.getValue();
// Check total hours
if (remainingHours < 6){

// Fetch the email address

var emailAddressRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B5"); 
var emailAddress = emailAddressRange.getValue();

var emailAddressRange2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B6"); 
var emailAddress2 = emailAddressRange2.getValue();

// Send Alert Email for teacher.
var message =  studentName + ' has ' + remainingHours + ' hours left of their course. This means their realtime Feedback report is due. ' +
'This is an automatically generated email.' ;
var subject = 'Realtime Feedback report due for ' + studentName;
MailApp.sendEmail(emailAddress,subject,message);

// Send Alert Email for course consultant.
var message2 =  studentName + ' has ' + remainingHours + ' hours left of their course. Their teacher will be completing the realtime Feedback report this week. Please speak to them regarding course renewal etc. This is an automatically generated email.' ;
var subject2 = 'Private student ' + studentName + ' has nearly completed their hours';
MailApp.sendEmail(emailAddress2,subject2,message2);

}
}

我愿意接受每周一次的触发,但是我也不知道如何编程。我已经尝试过了。

function RealtimeFeedbackdue() {

  ScriptApp.newTrigger('RealtimeFeedbackdue')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.MONDAY)
    .atHour(9)
    .create();

  var remainingHoursRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("F5");


  var remainingHours = remainingHoursRange.getValue();

  var studentNameRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B1");


  var studentName = studentNameRange.getValue();

  // Check total hours
  if (remainingHours < 6) {

    // Fetch the email address

    var emailAddressRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B5");
    var emailAddress = emailAddressRange.getValue();

    var emailAddressRange2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Attendance").getRange("B6");
    var emailAddress2 = emailAddressRange2.getValue();

    // Send Alert Email for teacher.
    var message = studentName + ' has ' + remainingHours + ' hours left of their course. This means their realtime Feedback report is due. ' +
      'This is an automatically generated email.';
    var subject = 'Realtime Feedback report due for ' + studentName;
    MailApp.sendEmail(emailAddress,message);

    // Send Alert Email for course consultant.
    var message2 = studentName + ' has ' + remainingHours + ' hours left of their course. Their teacher will be completing the realtime Feedback report this week. Please speak to them regarding course renewal etc. This is an automatically generated email.';
    var subject2 = 'Private student ' + studentName + ' has nearly completed their hours';
    MailApp.sendEmail(emailAddress2,message2);

  }
}
}

解决方法

由于您要基于单元格的编辑来触发功能的执行,因此在这种情况下,最合适的触发器是onEdit

因此,您可以使用与此类似的内容:

摘要

function onEdit(e){
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var sheet = e.range.getSheet();
  
  if (sheet.getName() == 'NAME_OF_THE_SHEET' && row == NUMBER_OF_ROW && col == NUMBER_OF_COL)
    // if the edit was made in the wanted cell
    // add the instructions here
}

说明

上面的函数利用对象中的e事件来获取有关已编辑单元格所需的数据。

摘要2

但是,您也可以使用基于时间的触发器,但这与已编辑的单元格没有任何关系-它只会在您选择的时间每个星期一触发。

function theTimeTrigger() {
   ScriptApp.newTrigger('RealtimeFeedbackdue')
     .timeBased()
     .onWeekDay(ScriptApp.WeekDay.MONDAY)
     .atHour(9)
     .create();
}

说明

为此,需要一个新功能来创建基于时间的触发器并将其与您已有的功能相关联。

从用户界面创建触发器

您还可以使用Apps脚本的UI创建触发器。可以通过单击此图标来完成,该图标会将您重定向到当前项目的触发器。

current project triggers

然后,您可以单击此按钮以创建一个新触发器,然后以所需方式自定义它。

add trigger

参考

我还建议您在下面查看这些链接,因为它们可能对您的未来发展有所帮助。