首页 > 解决方案 > 在 E 列中使用数组公式发送电子邮件不起作用

问题描述

我有一个填写数据 A:D 的工作时间 Google 网络应用程序表单

我添加了一个额外的列 E - 状态,它会根据 B 和 C 数据在 E1 中使用 ArrayFormula 函数相应地更改 IN - OUT。

在此处输入图像描述

我想在每次用户输入数据并且 E 列状态更改为“OUT”时触发一封电子邮件。

问题:当 E 列中的状态更改为 OUT 时,电子邮件不会触发,我哪里出错了?

function sendEmail(e) {
    var thisSheet = e.source.getActiveSheet();
    if (thisSheet.getName() !== 'MAIN' || e.range.columnStart !== 5 || e.range.rowStart == 1 || e.value !== 'OUT') return;
    var body, headers = thisSheet.getRange(1, 1, 1, 5)
        .getValues()[0],
        thisRow = thisSheet.getRange(e.range.rowStart, 1, 1, 5)
        .getValues()[0],
        in = thisRow[3],
        out = thisRow[4],
        recipients = "email@email.com",
        subject = "⚫ Work Log "+in +" "+out
        body = "Work Log Record \n\n",
        i = 0;
    while (i < 5) {
        body += headers[i] +' - ' + thisRow[i] +'\n';
        i++;
    }
    
    MailApp.sendEmail(recipients, subject,  body, {name: "Company"});
}

标签: javascriptarraysgoogle-apps-script

解决方案


脚本执行和 API 请求不会导致触发器运行。例如,调用 Range.setValue() 来编辑单元格不会导致电子表格的 onEdit 触发器运行。

这适用于简单可安装的触发器。所以你需要一种不同的方法。你可以试试

  • 作为 Google 网络应用表单执行的一部分发送电子邮件。
  • 创建一个时间驱动的触发器来定期检查状态,然后发送电子邮件。

请记住,这in是一个保留字,因此您不能将其用作变量。


推荐阅读