email - Google 脚本 - 发送电子邮件警报

标签 email google-apps-script

我有一个脚本,可以查看 G 列中的值,如果 A 列中的对应单元格为空,则向我发送一封电子邮件。

--- 什么有效 -

  • 它适用于静态值:它会为 G 列中每个非空单元格发送一封电子邮件,而 A 列中没有值

--- 什么不起作用 --

  • 当从另一个选项卡获取 A 列值时,它会针对每个 G 列单元格(空或非空)发送几封电子邮件。这样一来,就好像所有 G 和 A 单元都有数据一样,所以我会收到多封不需要的电子邮件。

这是脚本代码:

  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet to send emails');
  const data = sh.getRange('A2:G'+sh.getLastRow()).getValues();
  data.forEach(r=>{
     let overdueValue = r[0];  
     if (overdueValue === ""){
         let name = r[6];
         let message = 'Text ' + name;
         let subject = 'TEXT.'
         MailApp.sendEmail('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="731e0a161e121a1f33141e121a1f5d101c1e" rel="noreferrer noopener nofollow">[email protected]</a>', subject, message); 
     }
  });  
}

这是测试表的链接:

https://docs.google.com/spreadsheets/d/1OKQlm0PjEjDB7PXvt34Og2fa4vPZWnvLazTEawEtOXg/edit?usp=sharing

在此测试用例中,我“应该”仅收到一封与 ID 55555 相关的电子邮件。按照原样的脚本,我收到一封与 55555 相关的电子邮件,以及其他几封“未定义”的电子邮件。

为了避免垃圾邮件,我没有将脚本添加到该工作表中,但它显示了“Vlookup”的想法。

谁能帮我一下吗? 预先感谢您

最佳答案

问题:

原始脚本的问题是 sh.getLastRow 返回 1000(它还处理那些没有内容的行,结果未定义)

output1

修复 1:获取 G 列的特定最后一行:

const gValues = sh.getRange('G1:G').getValues();
const gLastRow = gValues.filter(String).length;

output2

修复 2:过滤数据

const data = sh.getRange('A2:G' + sh.getLastRow()).getValues().filter(r => r[6]);

output3

注意:

  • 正如 Kris 在评论中提到的,在特定情况下获取上面最后一行将会失败(与 getNextDataCell 相同)。当列的第一行和最后一行之间有空白行时,这将无法正确获取最后一行。如果您有此类数据,请使用第二种方法,即过滤数据。
  • 如果 G 列中的数据在第一行和最后一行之间没有空白单元格,则任何方法都应该有效。

关于email - Google 脚本 - 发送电子邮件警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69093757/

相关文章:

email - 如何使用 w3m 呈现 EMAIL 消息中的 HTML 内容?

javascript - 在 Sheets/App Script 中将字符串拆分为单独单元格的方法

google-apps-script - 在另一个应用程序脚本中调用应用程序脚本

google-apps-script - 如何使用 Gmail API、OAuth2 for Apps 脚本和域范围委派为 G Suite 域中的用户设置电子邮件签名

javascript - 超出了 Google 应用脚本的最长执行时间

javascript - 错误: The requested resource could not be found

email - 从TB中的_different_帐户转发已过滤的电子邮件

csv - 如何使用 Google SpreadSheet 将成本上传到 Google Analytics

email - Cron 发送电子邮件时使用 STDERR 但不使用 STDOUT?

c# - 向 Outlook Exchange 联系人电子邮件地址发送电子邮件