Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 当google sheets选中复选框时,向单个收件人发送合并邮件_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 当google sheets选中复选框时,向单个收件人发送合并邮件

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

我有一个电子表格,可供您编辑。 我想它发送一个合并电子邮件收件人在列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 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的这一伟大解释。它工作起来很有魅力;)