我有一个脚本,可以查看 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(它还处理那些没有内容的行,结果未定义)
修复 1:获取 G 列的特定最后一行:
const gValues = sh.getRange('G1:G').getValues();
const gLastRow = gValues.filter(String).length;
或
修复 2:过滤数据
const data = sh.getRange('A2:G' + sh.getLastRow()).getValues().filter(r => r[6]);
注意:
- 正如 Kris 在评论中提到的,在特定情况下获取上面最后一行将会失败(与
getNextDataCell
相同)。当列的第一行和最后一行之间有空白行时,这将无法正确获取最后一行。如果您有此类数据,请使用第二种方法,即过滤数据。 - 如果 G 列中的数据在第一行和最后一行之间没有空白单元格,则任何方法都应该有效。
关于email - Google 脚本 - 发送电子邮件警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69093757/