2016-03-23 4 views
0

Моя компания создала Google Form, чтобы сделать один из наших процессов намного проще. Форма Google основана на основной таблице, содержащей все данные, введенные из формы. Затем эта таблица отфильтровывает отправку формы и отправляет данные в электронную таблицу каждого департамента, которая, как ранее говорилось ранее, получает всю информацию из «Главной таблицы».Отправка Уведомления по электронной почте Листы Google

Мы предварительно установили его таким образом, чтобы сотрудники работали и одобряли или отклоняли эти запросы в своей электронной таблице, мы получили бы уведомление по электронной почте, если бы кто-то вошел в «Утвержденный» или «Отказано». Недавно мы изменили его, поэтому, если кто-то подал запрос клиенту, он будет автоматически одобрен, но когда мы это сделали, уведомление по электронной почте перестало работать, потому что никто не вводит вручную «Утвержденные» или «Отклоненные» для этих запросов. Он по-прежнему работает, когда он вводится вручную, но когда ячейка автоматически заполняется, sendNotification не работает.

Поскольку фактические данные не вводятся в отдельные листы отделов, мы хотели поместить триггер уведомлений на «Главный лист», но у нас есть время, необходимое для отправки уведомления по электронной почте. В принципе, мы хотим, чтобы, если какая-либо ячейка в «Столбец F» содержит определенный список адресов электронной почты, она отправит электронное письмо третьему лицу, которое уведомит их, чтобы действительно пойти дальше и внести изменения.

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

function sendNotification() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Form Responses 3"); 
    //Get Active cell 
    var mycell = ss.getActiveSelection(); 
    var cellcol = mycell.getColumn(); 
    var cellrow = mycell.getRow(); 
    var cellValue = mycell.getValue(); 

    var activeUser = Session.getActiveUser(); 
    var recipients = "[email protected]"; 
    var subject = "Update to "+ss.getName(); 
    var body = activeUser + " has marked row " + cellrow + " \"" + cellValue + "\" in \"" + ss.getName() + "\". Visit " + ss.getUrl() + " to view the changes."; 

    if (cellcol == 2) { 
    if (cellValue.indexOf('[email protected]') >= 0) { 
     var subject = "Lunch Is Served"; 
     Logger.log('Sending approval notification of row ' + cellrow + ' to ' + recipients); 
     MailApp.sendEmail(recipients, subject, body); 
    } 
    } 
} 

Пожалуйста, имейте в виду, что мы не можем использовать lastRowNumber (по крайней мере, я Ждут» Думаю, мы могли бы), потому что у нас уже есть более тысячи строк, поэтому информация будет заполняться в массив автоматически. Позднее наш текущий триггер установлен на «On Form Submission», потому что мы хотим, чтобы эти электронные письма вошли, поскольку формы Отправлено.

Я включил образец таблицы для вас, ребята, чтобы посмотреть. При заполнении формы используйте [email protected] в качестве своего адреса электронной почты.

Google Лист можно найти на следующем сайте: Test Sheet!

Спасибо так много, и я с нетерпением жду, чтобы читать ваши ответы!

ответ

0

Вы не можете использовать строку:

var mycell = ss.getActiveSelection(); 

Если эта функция работает от «On Form Submit» спускового крючка, нет активного выбора. Хотя, существует свойство, доступное для объекта события «On Form Submit», который дает текущий отредактированный диапазон. Вы должны получить объект события из представления формы. Тогда у вас есть 3 варианта. 1) Просто получите значения 2) Получите объект вопросов и их значения. 3) Измените диапазон редактируемого диапазона. Во-первых, вы получаете объект события, который передается в функцию. Когда форма отправляется, данные автоматически становятся доступными для функции, связанной с триггером отправки формы.В письме e обычно используется как имя переменной, чтобы получить объект события:

function sendNotification(e) { 

Но вы можете использовать любое имя переменной:

function sendNotification(objOfData) { 

Apps Script Documentation - Spreadsheet - On Form Submit

function sendNotification(e) { 
    var cellValue = e.values[4];//Get the value in column 5 
+0

Спасибо так много для отвечая @Sandy Good. Единственное, что, когда я пытаюсь запустить этот код, это дает мне это сообщение об ошибке: «TypeError: Невозможно прочитать значения свойств» из undefined. (Строка 8, файл «Код») «Есть ли у вас какие-либо рекомендации по этому ? Я создал новый скрипт под вашим именем на листе, кстати, если вы хотите еще раз взглянуть на него. Кроме того, не будет ли это e.values ​​[5] вместо [4], так как это 5-й вопрос, заданный по форме? Мне жаль, что я по-прежнему новичок в этом. – dhjeffery89

+0

Еще одна вещь: у нас есть наш обычный лист, который автоматически регистрирует ваше имя пользователя, которое заполняет «Столбец B» в нашей реальной электронной таблице, и это то, что мы хотели использовать в нашем уведомлении по электронной почте. Я задал вопрос, чтобы задать вопрос на листе, как это, потому что он не позволит мне выбрать вариант автоматического входа в систему. Еще раз спасибо за помощь, это очень много значит для меня. – dhjeffery89

+0

Объект 'e' будет не определен, если вы запустите код из редактора кода. Единственный способ, которым 'e' будет иметь переданный ему объект, - это отправить форму, и эта функция является функцией для триггера отправки. Значения в массиве имеют индекс на основе нуля. Первое значение имеет индекс нуля. –

Смежные вопросы