Если я вас правильно понял, вы хотите сделать следующее:
- Когда пользователь отправляет форму, возьмите значения из ответа (полученные с помощью объекта события):
townCity
и currency
. - Получить данные с другого листа, который содержит список городов (столбец
B
) и выделенный бюджет для каждого города (столбец C
). - Найти город, отправленный пользователем, и проверьте выделенный бюджет.
- Если
currency
, отправленный пользователем, превышает выделенный бюджет, отправьте электронное письмо.
Если это верно, вы можете изменить свою функцию sendEmails
на эту:
function sendEmails(townCity, currency){
var ss = SpreadsheetApp.openById("ssid");
var sheet = ss.getSheetByName("Rates for validation check");
var firstRow = 2;
var firstCol = 2;
var numRows = sheet.getLastRow() - firstRow + 1;
var numCols = 2;
var allocated = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
var index = allocated.map(function(value) {
return value[0];
}).indexOf(townCity);
if (currency > allocated[index][1]) {
// Send email:
// MailApp.sendEmail(recipient, subject, body)
}
}
В этой функции предопределенные города и бюджеты извлекаются в одном двумерном массиве, и используется indexOf найти индекс представленного города в этом массиве. После извлечения этого индекса он используется для поиска соответствующего бюджета allocated[index][1]
и сравнения его с отправленным currency
.
ОБНОВЛЕНИЕ:
В форме у вас есть несколько вопросов, которые называются Town/City for {country}
, по одному на каждую страну. Чтобы узнать город, который нужно искать, сначала нужно проверить ответ на вопрос Country
. Если это так, вы можете использовать свойство события namedValues , объект, который содержит имена вопросов и значения из представления формы.
Это может быть что-то вроде этого (я предполагаю, что у вас есть вопрос под названием Currency
:
function onFormSubmit(e) {
var country = e.namedValues["Country"][0]; // Retrieve country from form submission
var currency = e.namedValues["Amount"][0]; // Retrieve currency from form submission
country = country.charAt(0).toUpperCase() + country.slice(1).toLowerCase(); // Transform country from all capitalized to first character capitalized
var townCity = e.namedValues["Town/City for " + country][0]; // Look for value corresponding to this country town/city
sendEmails(townCity, currency);
}
ОБНОВЛЕНИЕ 2:
Проблема, с которой вы столкнулись, что названия вопросов немного отличаются от ожидаемых:
- В разделах городов и населенных пунктов страны все названия вопросов должны иметь формат
Town/City for {countryName}
, хотя во многих случаях в вашей форме это Town/City {countryName}
, без for
. Вы должны исправить это для всех ваших стран в вашей форме (или соответственно изменить скрипт). - Поскольку формат стран иногда пишется с большой буквы,
toLowerCase
имеет чтобы название страны использовалось в том же формате, что и в следующем разделе (только первый символ с большой буквы). Я добавил toLowerCase
в сценарий, чтобы избежать этой проблемы. - Свойство, которое вы хотите отслеживать Я полагаю, это
Amount
, а не Currency
. Я редактировал это в скрипте.
Примечания:
Ссылка: