我正在寻找这是否可能,我已经开发了一个谷歌表格,其中有一个日期选择器,在电子表格输出中,我希望运行检查以查看用户是否未满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);
}
}
答案 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);
}