Оператор case не будет соответствовать тексту из столбца таблицы в скрипте Google Apps (скрипт внутри)
У меня есть форма Google и соответствующая таблица результатов. У меня есть скрипт Google Apps на листе, который нужно активировать при отправке формы. Он читает запись, помещает форматы заполненных столбцов в электронное письмо и отправляет это электронное письмо по указанному адресу. Все это работает как задумано.
Однако есть инструкция case, которая должна установить целевой адрес электронной почты и строку темы на основе текста в одном из столбцов. Я не могу заставить его читать что-либо, кроме случая по умолчанию. Текст в столбце (столбец "кампус"), кажется, соответствует заявлениям дела? У кого-нибудь есть совет? Спасибо!
function SendGoogleForm(e) {
if (MailApp.getRemainingDailyQuota() < 1) return;
var s = SpreadsheetApp.getActiveSheet();
var columns = s.getRange(1, 1, 1, s.getLastColumn()).getValues()[0];
var email = "";
var subject = "";
var message = "";
switch (e.namedValues["Campus"]){
case "Lower School":
email = "xxxx@*****.org";
subject = "LS Ticket Created";
message = "Campus column is: " + e.namedValues["Campus"] + "\n";
message += "Case is: Lower School"+"\n";
break;
case "Upper School":
email = "yyyy@*****.org";
subject = "US Ticket Created";
message = "Campus column is: " + e.namedValues["Campus"] + "\n";
message += "Case is: Upper School"+"\n";
break;
case "S*******":
email = "zzzz@*****.org";
subject = "SC Ticket Created";
message = "Campus column is: " + e.namedValues["Campus"] + "\n";
message += "Case is: S*******"+"\n";
break;
default:
email = "xxxx@*****.org";
subject = "General Ticket Created";
message = "Campus column is: " + e.namedValues["Campus"] + "\n";
message += "Case is: Default"+"\n";
break;
}
for (var keys in columns) {
var key = columns[keys];
if (e.namedValues[key] && (e.namedValues[key] !== "")) {
message += key + ' :: ' + e.namedValues[key] + "\n\n";
}
}
MailApp.sendEmail(email, subject, message);
}
2 ответа
Проблема заключается в том, что когда вы читаете параметры из URL (также относится к именованным значениям), вам необходимо выполнить синтаксический анализ int или string или соответствующего типа, за исключением того, что использование параметра switch / case является правильным.
Опции:
1. var input = 1; //int
2. var input = "myvalue"; //string
3. var input = parseInt(e.parameters.input);
//parsed int from querystring. http://.../?input=1
4. var input = e.parameters.input.toString();
//parsed string from querystring. http://.../?input=myvalue
5. var input = e.parameters.input;
//Not parsed int or string from query string.
//http://.../?input=1 or http://.../?input=myvalue
//This option will not work unless you parse to the appropriate type.
switch (input){
case 1:
//This works for option 1 and 3;
break;
case "myvalue":
//This works for option 2 and 4;
break;
default:
//Option 5 will fall here;
break;
}
Рекомендации:
e.namedValues возвращает значения в массиве, а не в виде простых строк. Это позволяет поддерживать несколько значений для одного поля.
Это означает, что вам нужно сослаться на первый элемент в массиве в вашем операторе switch с индексом 0:
switch (e.namedValues["Campus"][0]){
...
}
В противном случае вы используете Switch правильно.
Что касается вашего комментария, я не уверен, почему IF будет работать, когда Switch не работает, он также должен требовать доступа к элементу Array. Должно быть, что оператор IF неявно преобразует массив в строку для сравнения, в то время как оператор switch не имеет такого поведения.
Смотрите e.namedValues здесь, значения указаны в записи Array:
https://developers.google.com/apps-script/guides/triggers/events