Как написать функцию для проверки определенной ячейки и возврата строки этой ячейки в электронную таблицу - PullRequest
1 голос
/ 28 июня 2019

Описание: Я настроил триггер электронной почты, чтобы при изменении в электронной таблице, соответствующей приведенным ниже критериям, он отправлял электронное письмо.

То, что он в настоящее время делает: Если вы пишете «Да» в ЛЮБОЙ ячейке, это вызывает электронную почту.

Что бы я хотел сделать: ТОЛЬКО если вы напишите «Да» в столбце P, это вызовет электронную почту. Также хотелось бы, чтобы в строке темы письма указывалось, в какой строке написано «Да».

Заранее спасибо !!!

function sendApprovalEmail() {

var sheetNameToWatch = "Spreadsheet title"; //This is where my spreadsheet's title goes
var columnNumberToWatch = 16; //I think this should be column P?
var valueToWatch = 'Yes';

var s = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();

var email = 'email@email.com'; //for my email    
var message = "Message text will go here";
var subject = "Subject text will go here";

if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue().toString().toLowerCase() == valueToWatch);
MailApp.sendEmail(email, subject, message); 
}

1 Ответ

0 голосов
/ 28 июня 2019

Задача

Как продолжение комментариев, ваш вызов метода sendEmail() выходит за рамки оператора if. Есть три способа написать оператор if:

Полный синтаксис

На мой взгляд, это (хотя и не читаемость) лучший способ написать if...else операторы, чтобы избежать проблем с отладкой. Кроме того, подход с блочными операторами (оборачивая все с помощью {}) позволяет записать несколько условных операторов в предложения:

if(condition) { conditional statements; }else { other conditional statements; }

Краткий синтаксис

Тот, который вы используете, не содержит операторов блока, что может быть желательно при выполнении только одного условного состояния за раз, но вы должны убедиться, что оператор if не является закрыто до условного (то есть ;, означающего конец утверждения):

if(condition) conditional statement else another conditional

Сокращенный синтаксис

Условный оператор, который можно использовать, если вам нужно написать небольшое, легко читаемое условие и записать результат в переменную (в примере полный синтаксис используется с несколькими условиями):

condition1 ? onYes1 : condition2 ? onYes2

Решение

Как указано выше, при использовании короткого синтаксиса необходимо убедиться, что условный оператор входит в сферу действия оператора if, поэтому вам необходимо удалить ;, плюс я бы предложил разделить проверки на читаемость и использовать строгие Сравнение:

var isSheet = sheet.getName() === sheetNameToWatch;
var isCol   = range.getColumn() === columnNumberToWatch;
var isValue = range.getValue().toString().toLowerCase() == valueToWatch;

if (isSheet && isCol && isValue) {
  MailApp.sendEmail(email, subject, message);
}

Доступ к строке

Что касается вашего второго вопроса, вы можете получить доступ к номеру строки с помощью getRow() (или getRowIndex(), поскольку они в настоящее время идентичны), остальное довольно просто:

var curRow  = range.getRow();
var subject = 'Yes is in row '+curRow;

Полезные ссылки

  1. Условный оператор ссылка ;
  2. If выписка ссылка ;
  3. getRow() метод ссылка ;
  4. getRowIndex() метод ссылка ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...