google-apps-script - 在非手动更改/编辑单元格时触发脚本 - 谷歌脚本
问题描述
每次“否”在特定列中更改为“是”时,我都使用以下脚本发送电子邮件。
但是,只有在将单元格手动更改为“是”并键入单元格时才会发生这种情况。以及基于 on edit UI 触发器的触发器。
但是单元格会根据引用另一个工作表的公式进行更新,该工作表从中获取“否”和“是”,因此此工作表中的单元格没有手动编辑/更新。
我怎样才能让它在不手动更改单元格的情况下发送电子邮件,只有从“否”更改为“是”
任何帮助,将不胜感激。
function sendNotification(e){
var s = SpreadsheetApp.getActiveSpreadsheet();
var ss = s.getSheetByName("Order Details")
if(e.range.getColumn()==3 && e.value=='Yes'){
var cell = ss.getActiveCell();
var row = cell.getRow();
var ordernumber = ss.getRange(row,4).getValue(); //Column D
var sku = [{}]; sku = ordernumber.toString().split("-")
var sizewidth = ss.getRange(row,5).getValue(); //Column E
var sizeheight = ss.getRange(row,6).getValue(); //Column F
var qty = ss.getRange(row,8).getValue(); //Column H
var country = ss.getRange(row,10).getValue(); //Column J
var tube = ss.getRange(row,9).getValue(); //Column I
var paintingimage = ss.getRange(row,7).getValue(); //Column G
var orderlink = ('http://testly/Km345TS');
MailApp.sendEmail({
to: "xxx@gmail.com",
subject: country + " New Order No. " + ordernumber, // note the spaces between the quotes...
//attachment: [file,blob],
htmlBody: "Hello XYZ, <br><br>"+
"Please find order details below. <br><br>"+
sku[1] + "<br><br>" +
"Size - Width: " + sizewidth + " x " + "Height: " + sizeheight + "<br><br>"+
"Quantity - " + qty + "<br><br>"+
"- It needs to be tube rolled"+ "<br>" +
"- Shipment to " + country + "<br>" +
"- Order image is " + paintingimage + "<br><br>" +
"Please fill in cost and delivery details at this link " + orderlink + "<br><br>" +
"The order is for a customer from " + country + "<br><br>" +
"Thanking you, <br>" +
"ABC",
})
}
}
更新:解决方案 - 非常感谢 Ron。
function sendNotification2(){
var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet 1");
var data = sSheet.getRange(2, 1, sSheet.getLastRow(), sSheet.getLastColumn()).getValues(); //get the values of your table, without the header
var EMAIL_SENT = 'EMAIL_SENT';
for (var i = 0; i < data.length; i++) {
var row = data[i];
var send = row[16]; //Column Q
var emailSent = row[17]; //Column R
var ordernumber = row[4]; //Column E
var country = row[10]; //Column K
var orderlink = ('http:/testly/Khghgy');
var shipaddress = row[18]; //Column S
if (send == "Yes"){
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
MailApp.sendEmail({
to: "xx@gmail.com",
subject: country + " Ship Order No. " + ordernumber, // note the spaces between the quotes...
htmlBody: "Hello XYZ, <br><br>"+
"Thanking you, <br>" +
"ABC",
})
sSheet.getRange(i+2, 18).setValue(EMAIL_SENT);
}
}
}
}
解决方案
如果您想在编辑更改时触发电子邮件,您可以创建一个单独的函数来监视另一张表上的编辑,然后调用上述函数发送电子邮件。
就像是:
function onEdit(){
var s = SpreadsheetApp.getActiveSpreadsheet();
var ss = s.getSheetByName("Other Sheet Name");
if(e.range.getColumn()==3 && e.value=='Yes'){ //change this if the data setup is different on the other sheet
sendNotification();
}
}
问题是,此设置随后将向电子邮件表上的每个“是”发送一封电子邮件。这可以使用“Email_Sent”指示符来纠正(您可以查看 - 有很多示例可用)。
**正如我在上一个问题中提到的,另一种选择是sendNotification
每分钟、5 分钟、10 分钟或 ? 这不会提供即时电子邮件,但几乎是这样。
推荐阅读
- r - 为什么是NA | 错误 = 不适用?
- react-native - 带有 React Native 视频的自定义播放/暂停按钮 - 获取 JSON 值错误消息
- python - 在 python 图中将 2^n 转换为数值
- tensorflow - 计算 YAMNET 中某一层的梯度
- c# - Razor 页面中的相同 URL 端点
- html - 输入元素(由 vuetify 生成)不会为长文本换行
- php - 如何在 php 中使用 http 身份验证 cURL SSL URL?
- autodesk-forge - 使用 Revit API 和设计自动化从模板文件创建项目文件
- laravel - Laravel Eloquent 是否支持回调?
- c# - c#解方程到未知参数