我在工作表文档中有一个名为“ Notif Inv”的选项卡,该选项卡还有其他几个选项卡。 这是一个只有2行的标签,其中第二行已更新为工作表中另一个标签的范围的最新过滤行。
另一方面,我具有此功能,该功能可以从“ Notif Inv”标签的第二行发送抓取数据的电子邮件。
function Email_NewInvs() {
// Get the sheet where the data is, in sheet 'Notif Inv'
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Notif Inv");
var startRow = 2; // First row of data to process since there is a header row
var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process is set by a formula which counts rows
// Fetch the range of cells A2:B6 where the emails and messages are
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range to input into the mailing system
var data = dataRange.getValues();
// This processes the emails you want to send
for (i in data) { var row = data[i];
var emailAddress = row[0]; // First column is the email address
var message = row[1]; // Second column is the message
var subject = "Nueva Factura"; // This is the subject of the email
// This parses the data for the email to send
MailApp.sendEmail(emailAddress, subject, message);
}
}
我的目标是在“ Notif Inv”标签中的第二行自动更改时触发此功能。
我尝试为此脚本使用onChange触发器,但是当所有工作表文档中发生任何更改时,它实际上都会触发它,这也意味着在与该文档无关的选项卡中所做的更改。
我还试图将函数名称更改为onChange(e),但是在“ Notif Inv”选项卡中发生更改时,它什么也没做。
有什么解决方法吗?
非常感谢
答案 0 :(得分:1)
使用onChange
触发器的脚本仅在更改工作表“ Notif Inv”时才运行。
将change事件传递给函数,并使用工作表的getName()
来确定要编辑的工作表,然后根据结果运行if
语句。
function Email_NewInvs(e) {
// Get the sheet where the data is, in sheet 'Notif Inv'
var sheet = e.source.getActiveSheet();
if (sheet.getName() === 'Notif Inv') {
var startRow = 2; // First row of data to process since there is a header row
var numRows = sheet.getRange(1,5).getValue(); // Number of rows to process is set by a formula which counts rows
// Fetch the range of cells A2:B6 where the emails and messages are
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range to input into the mailing system
var data = dataRange.getValues();
// This processes the emails you want to send
for (i in data) {
var row = data[i];
var emailAddress = row[0]; // First column is the email address
var message = row[1]; // Second column is the message
var subject = "Nueva Factura"; // This is the subject of the email
// This parses the data for the email to send
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
我们现在将事件对象与函数Email_NewInvs(e)
一起使用来定义var sheet
,以便我们可以检查已更改的工作表:
var sheet = e.source.getActiveSheet();
我添加了if
语句来检查已更改的工作表的名称:
if (sheet.getName() === 'Notif Inv') {
因此,现在仅当要更改的工作表名称与“ Notif Inv”匹配时,脚本才会运行。
答案 1 :(得分:0)
感谢您的回答。 我已经使用了您的代码,但不幸的是它无法正常工作。 我已经使用onChange事件类型为该函数设置了可安装的触发器,但是我只看到它的执行...但是没有发送电子邮件。 另一方面,当我更改其他选项卡中的内容时,它仍会发送执行信息... :(