无法从触发器功能执行sendEmail

时间:2014-10-17 23:36:00

标签: google-apps-script google-sheets

我正在寻找这是否可能,我已经开发了一个谷歌表格,其中有一个日期选择器,在电子表格输出中,我希望运行检查以查看用户是否未满18岁。如果用户未满18岁,我希望触发电子邮件。

我已经让电子邮件部分正常工作,但只有当我在google脚本窗口中执行代码时才会这样做。 (我仍然需要触发器工作,它给了我You do not have permission to call sendEmail)但我可以在谷歌脚本环境中运行它没问题

我知道如何计算日期,IE getTheYear() - getCurrentYear(),并将其包含在包含电子邮件执行脚本的IF else块中。

这是我的尝试,我认为我不会远离

function ageChecker() {

var sheet = SpreadsheetApp.getActiveSheet();
var valTEST = sheet.getRange("I2").getValue(); 
var cell = sheet.getActiveCell();
var msg="Warning Student X is under 18" 
var ui = SpreadsheetApp.getUi();

// Get the actual cell value
// var response = ui.alert(valTEST, ui.ButtonSet.YES_NO);
// valTest output TUE SEPT 17 1991 00:00:00 GMT+0100 (BST)

var d = new Date();
var timeStamp = d.getTime();  // Number of ms since Jan 1, 1970
//var response = ui.alert(d, ui.ButtonSet.YES_NO);

var age = valTEST-d;

var response = ui.alert(age, ui.ButtonSet.YES_NO);

 if(valTEST==18) {   
    MailApp.sendEmail("email@domain.ie","Student Error", msg);
  }

}

2 个答案:

答案 0 :(得分:1)

这是完全相同的问题。

Not allowed to execute code from Google sheets but it runs from the script editor

莫格达德说:

  

阅读Permissions and Custom Functions。由于自定义函数(从>电子表格函数调用的脚本)对电子表格的任何用户开放,因此不允许他们使用任何需要身份验证的服务。这就是你无法从一个人发送邮件的原因。

     

这与授权脚本访问您的服务的过程不同。这确实使错误消息混乱,但请放心,这与您调用脚本的方式有关。

     

没问题,因为自定义函数无论如何都是执行此类操作的不好方法,因为每次电子表格发生更改时都会重新评估该函数,发送的电子邮件数量超出您想要的数量。

     

我建议您为此操作创建一个菜单项。 (如果您创建新的电子表格脚本,请参阅编辑器中提供的示例代码。)工作流程是将光标移动到您想要处理的行,然后使用菜单“Make It So”,这将调用您的脚本。

答案 1 :(得分:0)

我找到了解决方法/解决方案。

1)我正在获得电子表格来进行年龄计算

=IF(( IF((DAY(NOW())-DAY(I2))<0 , -1,0)+(MONTH(NOW())-MONTH(I2)))< 0 , -1 , 0)+(YEAR(NOW())-YEAR(I2))

2)我创建了一个可以为我执行脚本的按钮

3)如果用户未满18岁,我添加了一个漂亮的电子邮件/单元格颜色选项

我希望这有助于某人

function ageChecker() {

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getDataRange();
 var values = range.getValues();
 var rangeColour = sheet.getRange("J:J");

 for (var r=0; r<values.length; r++) {

 var row = values[r],studentName = row[3],studentID = row[2],studentAge = row[9];
 var msg="Warning Student "+studentName+" with "+" Student Number ("+studentID+")"+" is under 18 with an age of "+ studentAge;   
 var cell = range.getCell(r+1, 10);

  if(studentAge <= 18) {   
    MailApp.sendEmail("test@user.com","Under Age Student Alert", msg); 
    cell.setBackgroundColor("#FF3300");     
  }
 } 
}
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menubuttons = [ {name: "Age Checker", functionName: "ageChecker"}];
ss.addMenu("HelperButton", menubuttons);
}