Google apps script 当google sheets选中复选框时,向单个收件人发送合并邮件
我有一个电子表格,可供您编辑。 我想它发送一个合并电子邮件收件人在列O与合并从列C->M 当选中a列中的复选框时,应执行此操作 我在本页的帮助下制作了一个脚本,允许我发送给O列中的所有收件人 但不仅限于列A中选中的行中的一个Google apps script 当google sheets选中复选框时,向单个收件人发送合并邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个电子表格,可供您编辑。 我想它发送一个合并电子邮件收件人在列O与合并从列C->M 当选中a列中的复选框时,应执行此操作 我在本页的帮助下制作了一个脚本,允许我发送给O列中的所有收件人 但不仅限于列A中选中的行中的一个 /** * Returns a rectangular grid of values in a given sheet. * @param {string} sheetName The name of the sheet object that contains the
/**
* Returns a rectangular grid of values in a given sheet.
* @param {string} sheetName The name of the sheet object that contains the data to be processed
* @return {object[][]} A two-dimensional array of values in the sheet.
*/
function getData(sheetName) {
var data = SpreadsheetApp.getActive().getSheetByName(sheetName).getDataRange().getValues();
return data;
}
/**
* Renders a template with values from an object.
* @param {string} template The template to render.
* @param{object} data The object containing data to render the template.
* @return {string} The rendered template.
*/
function renderTemplate(template, data) {
var output = template;
var params = template.match(/\{\{(.*?)\}\}/g);
params.forEach(function (param) {
var propertyName = param.slice(2,-2); //Remove the {{ and the }}
output = output.replace(param, data[propertyName] || "");
});
return output;
}
/**
* Converts a grid of values into an array of objects.
* @param {object[][]} rows An array of rows in the grid.
* @return {object[]} An array of objects (each row became an object).
*/
function rowsToObjects(rows) {
var headers = rows.shift();
var data = [];
rows.forEach(function (row) {
var object = {};
row.forEach(function (value, index) {
object[headers[index]] = value;
});
data.push(object);
});
return data;
}
/**
* Sends an email for each row.
*/
function sendEmails() {
var templateData = getData("Templates");
var emailSubjectTemplate = templateData[1][0]; //Cell A2
var emailBodyTemplate = templateData[4][0]; //Cell A5
var emailData = getData("Data");
emailData = rowsToObjects(emailData);
emailData.forEach(function (rowObject) {
var subject = renderTemplate(emailSubjectTemplate, rowObject);
var body = renderTemplate(emailBodyTemplate, rowObject);
MailApp.sendEmail(rowObject["Email"], subject, body);
});
}
知道我如何实现这一点吗?不确定这是否回答了您的问题,但您可以为范围内的每个单元格设置一个
onEdit
触发器以运行.getRange(“A2:A”).getValues()
。如果等于TRUE
(复选框的值)且下一个为空,则对于要发送电子邮件的应用程序脚本?在forEach
循环中添加If
块。
您需要修改sendmails()
函数:
函数sendEmails(){
var templateData=getData(“模板”);
var emailSubjectTemplate=templateData[1][0];//单元格A2
var emailBodyTemplate=templateData[4][0];//单元格A5
var emailData=getData(“数据”);
emailData=行对象(emailData);
emailData.forEach(函数(rowObject){
if(rowObject[“Sendt mail bekræftelse”]==true){//新行
var subject=renderTemplate(emailSubjectTemplate,rowObject);
var body=renderTemplate(emailBodyTemplate,rowObject);
MailApp.sendmail(rowObject[“Email”]、主题、正文);
}//新线
});
}
说明:
当应用程序脚本读取时,工作表中的复选框为true
或false
。因此,在基于每行发送每封电子邮件的forEach
循环中(rowObject
),您可以将所有操作包装在if
块中,以确认复选框是否包含[✓], 它被读取为true
,即(rowObject[“Sendt mail bekræftelse”]==true)
如果您的onEdit
触发器绑定到sendmails
功能,那么它现在也应该可以工作。每次在工作表中进行更改时,它都会选中所有复选框以及是否存在[✓], 它将发送
进一步阅读:
如果有帮助,这里有一些关于if…else
语法和forEach
的参考
这里要掌握的主要概念是“条件语句”和“for循环”,以防您想在谷歌上搜索。我希望这对您有所帮助。对不起,我很难准确理解您想要什么。您能否确认:您的脚本工作正常,只是您希望它只向a列中有支票的人发送邮件。因此,如果他们有[✓] 然后发送邮件。对吗?很抱歉没有在我的帖子中澄清这一点。是的。脚本工作正常,但正在发送到O列中的所有电子邮件。我希望它一次发送一封电子邮件。但只有在使用[✓] 正如您所写的@iansedano。不确定您的确切意思@mkpersonal。我设置了一个触发器,在编辑时触发,但它仍然会发送给O列中的所有收件人。我如何纳入您的建议?仍然是一个抓取代码片段而不是编写我自己的代码的noob…感谢@iansedano的这一伟大解释。它工作起来很有魅力;)