Google apps script 当时间超过2:00小时时向我的电子邮件发送通知

Google apps script 当时间超过2:00小时时向我的电子邮件发送通知,google-apps-script,Google Apps Script,我在航运公司工作,我必须记录每辆卡车在这里的时间。我有一个电子表格设置了卡车到达和离开的时间(这个信息由我们的安全团队输入),我有一个公式设置来告诉卡车在这里有多长时间,有条件的格式设置在时间到达2小时后显示为红色,我想设置它,所以只有当时间超过2小时时,我才会收到一封电子邮件。 你能帮我吗 我的纸条太累了,不知什么原因,我不能让它正常工作 谢谢, Matt这比我一开始想象的要复杂一些,因为持续时间格式提供了一个分数天。因此,我在获取数据之前和之后切换格式,以便获得实际的分数值。因此,所有时间列

我在航运公司工作,我必须记录每辆卡车在这里的时间。我有一个电子表格设置了卡车到达和离开的时间(这个信息由我们的安全团队输入),我有一个公式设置来告诉卡车在这里有多长时间,有条件的格式设置在时间到达2小时后显示为红色,我想设置它,所以只有当时间超过2小时时,我才会收到一封电子邮件。 你能帮我吗

我的纸条太累了,不知什么原因,我不能让它正常工作

谢谢,
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]

欢迎光临,请阅读。