这可能与您要找的很接近:
首先,您必须确定电子表格的格式,以便所有操作员都以标准格式记录信息。我对每张工作表都使用了以下格式。
所有用于记录信息的工作表都以“ph:”前缀开头。我得到了整个工作表数组,然后循环遍历它们以查找以“ph:”name.slice(0,3) 开头的工作表。找到后,我得到 A1:B6 的范围并将所有数据收集到一个数组中,然后使用以下算法 dObj [column1 中的值]=column2 中的值遍历该数组,将所有信息放入一个关联数组中。因此,在我的示例中,您可以使用 dObj.Name 获取名称,并使用 dObj.Message 等获取消息。所以这会将第一列中的键与第二列中的值相关联。
现在是代码:
function sendApprovalEmails(){
var ss=SpreadsheetApp.getActive();
var shts=ss.getSheets();
for(var i=0;i<shts.length;i++){
var sh=shts[i];
var name=sh.getName();
if(name.slice(0,3)=='ph:'){//finds the operator log sheets
var dObj={};
var rg=sh.getRange('A1:B6');//Use a fixed range so you can use the rest of the sheet for whatever
var vA=rg.getValues();
for(var j=0;j<vA.length;j++){
dObj[vA[j][0]]=vA[j][1];//Builds the associative array
}
if(dObj.Approval=='Yes'){
Logger.log('Send Email:\nDate: %s\nNumber: %s\nName: %s\nMessage: %s,To: %s',Utilities.formatDate(new Date(dObj.Date),Session.getScriptTimeZone(),"E MMM dd, yyyy"),dObj.Number,dObj.Name,dObj.Message,dObj.Email);
var recipient=dObj.email;
var subject="Missed Call Notification";
var body = Utilities.formatString('Hello! %s %s %s %s',Utilities.formatDate(new Date(dObj.Date),Session.getScriptTimeZone(),"E MMM dd, yyyy"),dObj.Name,dObj.Number,dObj.Message);
//MailApp.sendEmail(recipient, subject, body);
}
}
}
}
在我的示例中,B1 的数据验证为是或否。
当然,这可能只是一个起点。您可以创建代码以复制主表并在每次通话时打开它。我不知道工作表的数量是否有限制,但一个电子表格中的单元格数量是有限制的。
Documentation Reference:
顺便说一下,这个版本的代码的工作方式。
function sendApprovalEmail() {
var sheetNameToWatch = "test";
var columnNumberToWatch = 1;
var valueToWatch = "SENT";
var date = 5;
var name = 9;
var number = 10;
var message = 11;
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName()==sheetNameToWatch && range.getColumn()==columnNumberToWatch && range.getValue() == valueToWatch) {
var emailAddress = "foundit@found.com";
var subject = "Missed Call Notifcation";
var email = Utilities.formatString('Hello! %s %s %s %s',date,name,number,message);
//MailApp.sendEmail(emailAddress, subject, email);
Logger.log('\nemailAddress: %s\nsubject: %s\nemail: %s',emailAddress,subject,email);
}
}
我不喜欢在调试的时候发很多没用的邮件,所以我只是用Logger来记录邮件信息。