每次 Googlesheet 被用户编辑时避免重复电子邮件(Google 脚本)
Avoid Having Duplicate Email Everytime Googlesheet is edited by Users (Google Script)
我是 javascript 的新人,还在学习中。我制作了一个 Spread Sheet 作为工作数据的跟踪器,多个用户在上面工作。 WorkArea 选项卡WorkArea is where we tag the time and if completed. Another tab is the Error Tab ErrorTAB 是一个查询选项卡,如果标记不正确(未输入时间并被标记为已完成),则会显示信封编号。在错误选项卡中,单元格“S3”上有一个计数公式,它将确定是否存在错误并显示“TRUE”。我的问题是每次用户进行编辑时,我的代码都会发送太多电子邮件。如果可能的话,我希望它发送一次电子邮件。你能帮我解决这个问题吗?
这是我用 onEdit 触发器编写的代码
function sendEmail(e) {
var sp = PropertiesService.getScriptProperties();
var errorTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Error');
var cellRef = errorTab.getRange('S3').getValue();
var dataRef = "Kindly Check " + errorTab.getRange('B3').getValue() + errorTab.getRange('H3').getValue() + errorTab.getRange('N3').getValue();
var oldValue = sp.getProperty('S3') || 0;
if(cellRef == false && cellRef == oldValue) return;
else
var option = {
cc: "admin1@gmail.com",
}
{GmailApp.sendEmail("admin@gmail.com",
"Dating Contracts Email Notification for Error Tab",
dataRef,option);
sp.getProperty('S3', cellRef);
}
}
根据您的以下回复,
I want your idea that if email sent it will show sent on T.
如果您想在发送电子邮件后将 sent
放入“T”列(在您的情况下,单元格“T3”),如何进行以下修改?
顺便说一下,我认为 sp.getProperty('S3', cellRef);
发生了错误。因为 getProperty
只是一个参数。我以为你可能想成为 sp.setProperty('S3', cellRef);
.
修改后的脚本:
function sendEmail() {
var sp = PropertiesService.getScriptProperties();
var errorTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Error');
var [cellRef, sent] = errorTab.getRange('S3:T3').getValues()[0];
if (sent == "sent") return;
var [b3,,,,,,h3,,,,,,n3] = errorTab.getRange('B3:N3').getValues()[0];
var dataRef = "Kindly Check " + b3 + h3 + n3;
var oldValue = sp.getProperty('S3') || 0;
if (cellRef == false && cellRef == oldValue) return;
var option = { cc: "admin1@gmail.com" }
GmailApp.sendEmail("admin@gmail.com", "Dating Contracts Email Notification for Error Tab", dataRef, option);
errorTab.getRange("T3").setValue("sent")
sp.setProperty('S3', cellRef);
}
我是 javascript 的新人,还在学习中。我制作了一个 Spread Sheet 作为工作数据的跟踪器,多个用户在上面工作。 WorkArea 选项卡WorkArea is where we tag the time and if completed. Another tab is the Error Tab ErrorTAB 是一个查询选项卡,如果标记不正确(未输入时间并被标记为已完成),则会显示信封编号。在错误选项卡中,单元格“S3”上有一个计数公式,它将确定是否存在错误并显示“TRUE”。我的问题是每次用户进行编辑时,我的代码都会发送太多电子邮件。如果可能的话,我希望它发送一次电子邮件。你能帮我解决这个问题吗?
这是我用 onEdit 触发器编写的代码
function sendEmail(e) {
var sp = PropertiesService.getScriptProperties();
var errorTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Error');
var cellRef = errorTab.getRange('S3').getValue();
var dataRef = "Kindly Check " + errorTab.getRange('B3').getValue() + errorTab.getRange('H3').getValue() + errorTab.getRange('N3').getValue();
var oldValue = sp.getProperty('S3') || 0;
if(cellRef == false && cellRef == oldValue) return;
else
var option = {
cc: "admin1@gmail.com",
}
{GmailApp.sendEmail("admin@gmail.com",
"Dating Contracts Email Notification for Error Tab",
dataRef,option);
sp.getProperty('S3', cellRef);
}
}
根据您的以下回复,
I want your idea that if email sent it will show sent on T.
如果您想在发送电子邮件后将 sent
放入“T”列(在您的情况下,单元格“T3”),如何进行以下修改?
顺便说一下,我认为 sp.getProperty('S3', cellRef);
发生了错误。因为 getProperty
只是一个参数。我以为你可能想成为 sp.setProperty('S3', cellRef);
.
修改后的脚本:
function sendEmail() {
var sp = PropertiesService.getScriptProperties();
var errorTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Error');
var [cellRef, sent] = errorTab.getRange('S3:T3').getValues()[0];
if (sent == "sent") return;
var [b3,,,,,,h3,,,,,,n3] = errorTab.getRange('B3:N3').getValues()[0];
var dataRef = "Kindly Check " + b3 + h3 + n3;
var oldValue = sp.getProperty('S3') || 0;
if (cellRef == false && cellRef == oldValue) return;
var option = { cc: "admin1@gmail.com" }
GmailApp.sendEmail("admin@gmail.com", "Dating Contracts Email Notification for Error Tab", dataRef, option);
errorTab.getRange("T3").setValue("sent")
sp.setProperty('S3', cellRef);
}