Google apps script 当时间超过2:00小时时向我的电子邮件发送通知
我在航运公司工作,我必须记录每辆卡车在这里的时间。我有一个电子表格设置了卡车到达和离开的时间(这个信息由我们的安全团队输入),我有一个公式设置来告诉卡车在这里有多长时间,有条件的格式设置在时间到达2小时后显示为红色,我想设置它,所以只有当时间超过2小时时,我才会收到一封电子邮件。 你能帮我吗 我的纸条太累了,不知什么原因,我不能让它正常工作 谢谢,Google apps script 当时间超过2:00小时时向我的电子邮件发送通知,google-apps-script,Google Apps Script,我在航运公司工作,我必须记录每辆卡车在这里的时间。我有一个电子表格设置了卡车到达和离开的时间(这个信息由我们的安全团队输入),我有一个公式设置来告诉卡车在这里有多长时间,有条件的格式设置在时间到达2小时后显示为红色,我想设置它,所以只有当时间超过2小时时,我才会收到一封电子邮件。 你能帮我吗 我的纸条太累了,不知什么原因,我不能让它正常工作 谢谢, Matt这比我一开始想象的要复杂一些,因为持续时间格式提供了一个分数天。因此,我在获取数据之前和之后切换格式,以便获得实际的分数值。因此,所有时间列
Matt这比我一开始想象的要复杂一些,因为持续时间格式提供了一个分数天。因此,我在获取数据之前和之后切换格式,以便获得实际的分数值。因此,所有时间列都具有持续时间格式,而不是日期
function runOne() {
var ss=SpreadsheetApp.openById("Spreadsheet ID");
var sh=ss.getSheetByName("TimeSheet");
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var drg=sh.getRange(2,2,sh.getLastRow()-1,1);
var mrg=sh.getRange(2,3,sh.getLastRow()-1,1);
var mA=mrg.getValues();
var dA=drg.getValues();
var fA=rg.getNumberFormats();
rg.setNumberFormat("0.####################");
var vA=rg.getValues();
rg.setNumberFormats(fA);
var now=new Date();
Logger.log(now);
var daystart=new Date(now.getFullYear(),now.getMonth(),now.getDate()).valueOf();
var time=(now.valueOf()-daystart)/86400000;//converted to fraction of a day
Logger.log(time);
for(var i=0;i<vA.length;i++) {
if(!vA[i][5]) {
var start=vA[i][0];
dA[i][0]=time-start;
mA[i][0]=time-start>2/24?"Email":"No Email";
}
}
drg.setNumberFormat("0.####################");
drg.setValues(dA);
drg.setNumberFormat("hh:mm:ss");
mrg.setValues(mA);
var msg=[];
for(var i=0;i<vA.length;i++) {
if(mA[i][0]=="Email" && !vA[i][5]) {
msg.push(vA[i][3]);
}
}
if(msg) {
var recipient="your email";
var subject="Trucks with durations greater than 2 hours";
var body=Utilities.formatString('Trucks in the following locations: %s have been here for 2 hours or more.',msg.join(','));
//GmailApp.sendEmail(recipient, subject, body);//email disabled
var html=Utilities.formatString('recipient: %s<br />subject: %s<br />body: %s',recipient,subject,body);
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModelessDialog(userInterface, "Trucks longer than two hours");
}
}
函数runOne(){
var ss=电子表格应用程序openById(“电子表格ID”);
var sh=ss.getSheetByName(“时间表”);
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var drg=sh.getRange(2,2,sh.getLastRow()-1,1);
var mrg=sh.getRange(2,3,sh.getLastRow()-1,1);
var mA=mrg.getValues();
var dA=drg.getValues();
var fA=rg.getNumberFormats();
rg.setNumberFormat(“0.#######################”;
var vA=rg.getValues();
rg.setNumberFormats(fA);
var now=新日期();
Logger.log(现在);
var daystart=新日期(now.getFullYear()、now.getMonth()、now.getDate()).valueOf();
var time=(now.valueOf()-daystart)/86400000;//转换为一天的分数
Logger.log(时间);
对于(var i=0;i2/24?“电子邮件”:“无电子邮件”;
}
}
drg.setNumberFormat(“0.#######################”;
图纸设定值(dA);
图纸setNumberFormat(“hh:mm:ss”);
mrg.设定值(mA);
var msg=[];
对于以下代码中的(var i=0;i,您可以运行函数createTrigger
,该函数将创建一个OneEdit触发器[1],以便在编辑工作表时运行函数sendmail
。如果编辑的单元格位于D列(您可以设置该列),并且通过条件格式(通过代码颜色[2]进行比较)将其变为红色,它将使用GmailApp[3]类发送电子邮件
function sendEmail(e) {
var redCol = 4; //D column for durations
var editedCell = e.range;
var col = editedCell.getColumn();
//Red color code, taken from a cell with red background in this case cell D2
//You can replace this for the code string when you know it, default red is '#ff0000'
var cellColor = SpreadsheetApp.openById("1ehUnxIraQI2ZWA_dLOt78Y4_c9k7zsQf1eiJiI9RMLk").getSheetByName("Sheet1").getRange(2, redCol).getBackground();
if(col == redCol) {
var editedCellColor = editedCell.getBackground();
if(editedCellColor == cellColor){
Logger.log(cellColor)
//Will send email when a cell in D column turns red
GmailApp.sendEmail("email@example.com", "Subject: It has passed 2 hours", "Message body:" + cellColor);
}
}
}
function createTrigger() {
var ss = SpreadsheetApp.openById("[SPREADSHEET-ID]");
ScriptApp.newTrigger('sendEmail')
.forSpreadsheet(ss)
.onEdit()
.create();
}
[1]
[2]
[3] 欢迎光临,请阅读。