Это, вероятно, близко к тому, что вы ищете:
Сначала вы должны выбрать формат для вашей электронной таблицы, чтобы все операторы записывали информацию в стандартном формате.Я использовал следующий формат для каждого из своих листов.
Все листы, используемые для записи информации, начинаются с префикса «ph:».Я получаю весь массив листов и перебираю их в поисках листов, начинающихся с 'ph:' name.slice(0,3)
.После того, как я нашел, я получаю диапазон A1: B6 и собираю все данные в один массив, а затем перебираю массив, помещая всю информацию в ассоциативный массив, используя следующий алгоритм dObj [значение в столбце1] = значение в столбце2.Так что в моем примере вы можете получить имя с помощью dObj.Name, а сообщение получите с помощью dObj.Message и так далее.Таким образом, это связывает ключ в первом столбце со значением в столбце 2.
Теперь вот код:
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 имеет проверку данных Да или Нет.
Конечно, это, вероятно, только отправная точка.Вы можете создать код для копирования мастер-листа и открывать его при каждом телефонном звонке.Я не знаю, существует ли ограничение на количество листов, но есть ограничение на количество ячеек в одной электронной таблице.
Ссылка на документацию:
Кстати, эта версия вашего кода работает.
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 длязапишите информацию электронной почты.