Google Apps 脚本 - 根据单元格中的值发送电子邮件
Google Apps Script - Send Email based on value in cell
我是 Google 应用脚本的新手,我有一个包含三列的电子表格:姓名、过期日期和最后联系方式:https://docs.google.com/spreadsheets/d/1W04JiFZwpGCD-qddUkNJ9xQ1xiYwZnGhissudF1EvxM/edit?usp=sharing
我想给自己发送一封电子邮件提醒,其中包含 B 列中值过期的任何人的姓名。
到目前为止,我只能编写一个脚本,为第 2 行向自己发送电子邮件。我不知道如何让脚本循环遍历 B 列中的值。
这是我的脚本:
function sendEmail() {
var overdueRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B2");
var overdueValue = overdueRange.getValue();
if (overdueValue === "Overdue"){
var nameRange = SpreadsheetApp.getActiveSpreadsheet().getRange("A2");
var name = nameRange.getValues();
var message = 'Reach out to ' + name
var subject = 'Reach out to this person.'
MailApp.sendEmail('myemail@email.com', subject, message);
}
}
sendEmail()
解释:
简单说几点,把流程说清楚:
我假设您正在从脚本编辑器中执行 sendEmail()
。这样,由于您在函数之外也有 sendEmail()
,因此您最终会调用 sendEmail()
两次。删除函数的 'global' 调用并仅从脚本编辑器中调用 sendEmail()
。
不建议在 spreadsheet 对象上应用 getRange
。通过名称或位置定义特定的 sheet。在下面的示例脚本中,我通过名称 (Sheet1
) 定义了 sheet。将该名称更改为您的实际情况。
name
在你的代码中是一个二维数组而不是一个单一的值。请小心,因为这不是正确的做法。
在我下面的脚本中,我定义了一个包含列 A
和 B
的数组。名称在 A
列中定义,过期状态在 B
列中定义。通过这种方式,您可以迭代此数组,并通过访问数组本身在每次迭代中获取单个值。我使用了 forEach,但您可以随意使用自己的迭代方法。
解决方案:
function sendEmail() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // change Sheet1 to the name of your sheet
const data = sh.getRange('A2:B'+sh.getLastRow()).getValues();
data.forEach(r=>{
let overdueValue = r[1];
if (overdueValue === "Overdue"){
let name = r[0];
let message = 'Reach out to ' + name;
let subject = 'Reach out to this person.'
MailApp.sendEmail('myemail@email.com', subject, message);
}
});
}
Sheet 适用于脚本:
我是 Google 应用脚本的新手,我有一个包含三列的电子表格:姓名、过期日期和最后联系方式:https://docs.google.com/spreadsheets/d/1W04JiFZwpGCD-qddUkNJ9xQ1xiYwZnGhissudF1EvxM/edit?usp=sharing
我想给自己发送一封电子邮件提醒,其中包含 B 列中值过期的任何人的姓名。
到目前为止,我只能编写一个脚本,为第 2 行向自己发送电子邮件。我不知道如何让脚本循环遍历 B 列中的值。
这是我的脚本:
function sendEmail() {
var overdueRange = SpreadsheetApp.getActiveSpreadsheet().getRange("B2");
var overdueValue = overdueRange.getValue();
if (overdueValue === "Overdue"){
var nameRange = SpreadsheetApp.getActiveSpreadsheet().getRange("A2");
var name = nameRange.getValues();
var message = 'Reach out to ' + name
var subject = 'Reach out to this person.'
MailApp.sendEmail('myemail@email.com', subject, message);
}
}
sendEmail()
解释:
简单说几点,把流程说清楚:
我假设您正在从脚本编辑器中执行
sendEmail()
。这样,由于您在函数之外也有sendEmail()
,因此您最终会调用sendEmail()
两次。删除函数的 'global' 调用并仅从脚本编辑器中调用sendEmail()
。不建议在 spreadsheet 对象上应用
getRange
。通过名称或位置定义特定的 sheet。在下面的示例脚本中,我通过名称 (Sheet1
) 定义了 sheet。将该名称更改为您的实际情况。name
在你的代码中是一个二维数组而不是一个单一的值。请小心,因为这不是正确的做法。在我下面的脚本中,我定义了一个包含列
A
和B
的数组。名称在A
列中定义,过期状态在B
列中定义。通过这种方式,您可以迭代此数组,并通过访问数组本身在每次迭代中获取单个值。我使用了 forEach,但您可以随意使用自己的迭代方法。
解决方案:
function sendEmail() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1'); // change Sheet1 to the name of your sheet
const data = sh.getRange('A2:B'+sh.getLastRow()).getValues();
data.forEach(r=>{
let overdueValue = r[1];
if (overdueValue === "Overdue"){
let name = r[0];
let message = 'Reach out to ' + name;
let subject = 'Reach out to this person.'
MailApp.sendEmail('myemail@email.com', subject, message);
}
});
}
Sheet 适用于脚本: