我从事运输工作,所以我必须跟踪每辆卡车在这里有多长时间。我已经设置了一个电子表格,其中包含卡车到达和离开的时间(此信息由我们的安全团队输入)。我有一个公式集可以告诉卡车在这里待了多长时间,并且有条件格式化以便在到达时间2之后显示红色我要设置小时数,因此只有在时间超过2小时时才收到电子邮件。 你能帮我吗?
我的书架很累,由于某种原因我无法使其正常工作
谢谢, 马特
答案 0 :(得分:0)
这比起初我想的要棘手,因为持续时间格式只提供了一天的时间。因此,我尝试在获取数据之前和之后切换格式,以便获取实际的小数值。因此,所有时间列的持续时间格式都没有日期
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");
}
}
这是电子表格。 1,2和6列设置了持续时间格式
我禁用了Gmail行,并使用了该对话框进行测试。您可能要删除它。
答案 1 :(得分:0)
在下面的代码中,您可以运行函数createTrigger
,该函数将创建一个onEdit触发器[1],以在编辑工作表时运行函数sendEmail
。如果已编辑的单元格在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] https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
[2] https://developers.google.com/apps-script/reference/spreadsheet/range#getbackground