Умный поиск

Clipart 1920x320 | Mail

Как автоматически отправить письмо из формы Google | Dystlab Library

Как отправить письмо из формы Google

Почему Google Forms?

Как известно, формы Google являются удобным, надежным и бесплатным инструментом для взаимодействия с пользователями сайта. Но зачем использовать Google Forms, если существует множество различных компонентов и плагинов (например, для CMS Joomla! — Visforms, RSForm и пр.), которые позволяют организовать обратную связь в рамках одного сайта?

Безусловно, применяя встраиваемые в Ваш сайт формы-компоненты, Вы получаете такие выгоды:

  • дизайн форм повторяет дизайн сайта;
  • не используются никакие внешние ресурсы;
  • пользователь не покидает "границ" Вашего сайта и пр.

Вместе с тем, формы-плагины:

  • зависят от хостинга и движка сайта, а поэтому не всегда надежны;
  • сложно настраиваемы в плане предоставления доступа для нескольких пользователей и др.

Из собственного опыта скажу, что когда пользователи заполняют и отправляют форму с сайта, а данные записываются в базу лишь частично или возникают какие-то другие баги (первая и главная проблема из описанных выше) — невольно задумываешься о переходе на формы с надежного внешнего ресурса. Я пока остановился на Google Forms.

Автоматизация работы с пользователями

Если Вам нужно просто собрать какую-то информацию (например, адреса пользователей), то самой Google-формы будет вполне достаточно. Однако, в последнее время популярными становятся схемы, когда после заполнения формы пользователю следует, например, передать ссылку на скачивание файла. Разумеется, этот процесс желательно автоматизировать, особенно когда счет пользователей идет на десятки и более.

Пример формы

Рассмотрим данную задачу на примере простой Google-формы. Для этого создадим тестовую заготовку:

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 1. Пример простой Google-формы

После создания формы, Google попросит Вас связать ее с формой ответов (электронной таблицей). Делаем это.

Попытаться обойтись без скрипта?

Далеко не все любят программировать. Если Вы хотите настроить автоматизацию в визуальном режиме, без кода, можно воспользоваться дополнениями к Google Forms:

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 2. Как выбрать и установить дополнение к Google-форме

Откровенно говоря, витрина дополнений к Google Forms выглядит грустно: всего пара десятков дополнений, из которых абсолютно бесплатны лишь несколько. Да и функционал их не всегда отвечает поставленным задачам, поэтому я все же рекомендую настраивать автоматизацию с помощью существенно более гибкого (и абсолютно бесплатного!) инструмента — специального языка программирования Google Script.

Язык программирования (скрипт) Google Script охватывает все основные процессы внутри Вашего облака посредством собственного API. Синтаксически скрипт — достаточно прост и позволяет разрабатывать приложения на основе сценариев с расширением .gs (JavaScript).

Покажем на предыдущем примере, как автоматизировать отправку сообщения тому, кто заполнил нашу тестовую форму.

Работа с таблицей ответов

Данные, которые пользователи будут вводить в поля Google-формы, сохраняются в электронной таблице Google Spreadsheet (облачный аналог MS Excel). Чтобы данные записались в таблицу, нужно запустить форму на выполнение (кнопка "Открыть форму"):

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 3. Пример ввода данных в форму

После нажатия кнопки "Готово" возвращаемся в исходник формы и нажимаем "Просмотреть ответы". Данные каждого нового пользователя будут записаны в отдельную строку:

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 4. Данные пользователя сохранены в таблице

Отправка письма через Google Script

Чтобы сформировать скрипт для отправки сообщения пользователю, перейдем в меню "Инструменты" > "Редактор скриптов...":

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 5. Запуск редактора скриптов

Окно редактора скриптов выглядит следующим образом (название проекта по умолчанию заменено на "Авто-ответ респонденту"):

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 6. Редактор скриптов Google Script

Ниже приведем полный текст скрипта, после чего поясним смысл его ключевых строк.

function sendFormByEmail(e)
{    
  // instance of Active Spreadsheet:
  var responceSheet = SpreadsheetApp.getActiveSheet();
 
  // number of rows in responce form:
  var rows = responceSheet.getLastRow();
 
  // range of names, e-mails:
  var namesRange = responceSheet.getRange(rows, 2, 1, 1);
  var emailsRange = responceSheet.getRange(rows, 3, 1, 1);
 
  // last sender's name, e-mail::
  var nameSender = namesRange.getValue();
  var emailSender = emailsRange.getValue();
 
  // message ReplyTo, subject, body:
  var emailReplyTo = "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.";
  var subject = "Спасибо за Ваш интерес";
  var body = "<b>Здравствуйте, " + nameSender + "!</b> <br> Спасибо, что Вы с нами :)";
    
  // send the e-mails:
  MailApp.sendEmail(emailSender, emailReplyTo, subject, body);
}

Главная функция скрипта

В строке 1 задаем имя главной функции скрипта, и передаем в нее параметр "e" (данные формы).

Инициализация переменных

В строке 4 мы объявили переменную "responceSheet", которую инициализировали значением активного (открытого в данный момент) листа в электронной таблице. Листов в таблице может быть несколько, но по умолчанию создается один лист, поэтому он всегда будет активным. Класс SpreadsheetApp является стандартным классом Google Script для управления электронными таблицами, а его метод getActiveSheet возвращает активный лист таблицы.

В строке 7 с помощью метода getLastRow записываем в переменную "rows" количество строк нашей таблицы.

В строках 10, 11 инициализируются переменные "namesRange" и "emailsRange" соответственно, отвечающие за списки имен и e-mail всех пользователей (наборы данных). Метод getRange(row, col, rowN, colN) принимает аргументы:

  • row, col — номер строки и столбца, с которых начинается диапазон данных, соответственно;
  • rowN, colN — количество строк и столбцов, которые охватит диапазон данных, соответственно.

Чтобы отправить сообщение тому пользвателю, который заполнил форму последним, нам всегда нужна последняя строка таблицы (рис. 4), поэтому первым аргументом идет номер последней строки "rows". Далее, все имена будут располагаться в столбце 2, а адреса — в столбце 3. Окончательно, нам понадобится только одна ячейка таблицы, поэтому количество строк и столбцов в методе getRange rowN=1, colN=1.

В строках 14, 15 извлекаем из переменных "namesRange" и "emailsRange" имя и адрес пользователя, и записываем их в строковые переменные "nameSender" и "emailSender", соответственно.

В строках 18, 19, 20 инициализируются строковые переменные, отвечающие за обратный адрес (кому писать ответ), тему и основной текст письма. Основной текст в данном примере содержит некоторые элементы HTML-форматирования, с целью придания сообщению более приятного вида.

Отправка сообщения

Отправка сообщения происходит в строке 23. Используем стандартный класс MailApp, и его метод sendEmail.

Настройка поведения

Если сейчас оставить все "как есть", то при заполнении пользователем нашей Google-формы ничего не произойдет. Чтобы активировать схему взаимодействия, нужно настроить триггеры:

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 7. Настройка триггеров

Удаляем неиспользуемые триггеры (серым цветом) из формы, оставляем один. В поле "Мероприятия" устанавливаем значение "Из таблицы" > "Отправка формы". Этот параметр указывает, что наш скрипт будет выполняться тогда, когда произойдет отправка формы (пользователь нажмет кнопку "Готово").

Перед первой установкой триггеров, Google может потребовать предоставить доступ к некоторым разделам Вашего аккаунта — соглашаемся на это.

Отладка скрипта

Чтобы проверить, как работает наш скрипт, воспользуемся функцией "Отладка":

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 8. Отладка скрипта

Если в коде допущены ошибки, редактор укажет на них. Если ошибок нет, то скрипт запускается на выполнение.

Внимание! Если по логике вашего скрипта происходит чтение данных из таблицы и отправка сообщения, то в режиме отладки так и произойдет — письмо будет отослано по указанному адресу. Пожалуйста, проследите, чтобы пользователи Вашего сайта не получили каких-то отладочных сообщений.

Результат работы

На примере тестовых данных (рис. 3) получим следующий результат:

Как автоматически отправить письмо из формы Google Form | Dystlab Library

Рис. 9. Сообщение доставлено

Как видим, сообщение из скрипта было успешно доставлено по указанному нами адресу.

Успехов в освоении Google Forms и Google Script! Оставляйте комментарии, делайте репосты.

P. S. HTML-форматирование

На момент написания статьи, функция SendEmail класса MailApp допускала HTML-форматирование письма, но с более поздними версиями это может не сработать. Чтобы добиться HTML-формата, используйте следующий синтаксис:

MailApp.sendEmail({to: emailSender, replyTo: emailReplyTo, subject: subject, htmlBody: body});

Комментарии   

0 # Мэри 21.09.2017 04:13
Здравствуйте! Помогите, пожалуйста!
Настроила автоответ, все работало хорошо. Надо было поменять текст в автоответе. Зашла изменить его, а в этом окне, где писали все коды, ничего нет - пусто. Но письма все равно приходят в ответ на заполнение формы.
Стала делать по новой автоответ. Сделала все так же, как на другой работающей форме, но теперь пишет:
TypeError: Не удается вызвать метод "getLastRow" объекта null. (строка 7, файл Код)
var rows = responceSheet.getLastRow();

Что делать, не пойму? Как устранить ошибку, как сделать, чтобы старые письма больше не отправлялись или как изменить текст письма в старом сообщении....
Помогите, пожалуйста!
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 21.09.2017 09:15
посмотрите сообщения ниже, может быть у Вас такая же проблема как у mikes
Ответить | Ответить с цитатой | Цитировать
0 # Мэри 21.09.2017 10:16
Я уже тоже подумала, потому что посмотрела триггер проекта - показывает один, а если нажать "все ваши триггеры" - два штуки, и один (который судя по всему и работает) сереньким цветом и недоступен для редактирования/удаления.
Уже проверила все свои аккаунты, с которых могла заходить и настраивать, но ни в одном из них нет этой формы. И форма создана с этого аккаунта и письма с него же рассылаются.

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

Есть еще мысли, как исправить ситуацию?
Буду очень благодарна!
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 21.09.2017 10:27
удалите связанную таблицу и создайте новую. Если нужны контакты из старой - скопируйте))
Ответить | Ответить с цитатой | Цитировать
+1 # Мэри 22.09.2017 05:02
Спасибо! Я, видимо, неправильно открыла редактор скриптов - прямо из формы, а не из таблицы. Удалила таблицу, она не удалилась. Открепила от формы, заново прикрепила. Настроила из таблицы - вроде, работает, но мне пришло 100 писем на адрес, с которого я отправляла форму о_О и больше не отправляется при последующих проверках, пишет, что:
Служба была вызвана слишком много раз за день: email. (строка 24, файл Код)
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 22.09.2017 07:47
да, на бесплатном аккаунте ограничение - 100 писем в день
Ответить | Ответить с цитатой | Цитировать
+2 # Igor 21.09.2017 00:03
Красавец ! Очень помогло !
Ответить | Ответить с цитатой | Цитировать
0 # Валентин 19.09.2017 19:37
подскажите пожалуйста, как сделать, чтоб в письмо пользователю отправлялся Doc файл?
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 19.09.2017 20:39
На этой странице есть пример вставки в письмо двух файлов (PDF и HTML):
developers.google.com/.../mail-app
Ответить | Ответить с цитатой | Цитировать
+1 # Валентин 19.09.2017 20:42
спасибо за ответ)
Ответить | Ответить с цитатой | Цитировать
0 # Мария 26.06.2017 06:53
Блин, почему-то не пишется. Бр вставляла, чтоб строку перенести
Ответить | Ответить с цитатой | Цитировать
0 # Мария 26.06.2017 06:52
Вставляла где нужен перенос строки
Ответить | Ответить с цитатой | Цитировать
0 # Мария 26.06.2017 06:50
Здравствуйте! Спасибо большое за этот пост!
Скажите, почему у меня сворачивается текст авто-ответа при отправке? И человеку надо нажать на три точки, чтобы его развернуть. Текст длинный, и я просто вставляла , где нужен перенос строки. Как сделать, чтобы текст вставлялся полностью? Спасибо
Ответить | Ответить с цитатой | Цитировать
0 # Анастасия 12.06.2017 10:05
Помогите, плиз

ввела все правильно, коды. Делала пару месяцев назад все работает. Создаю новый автоответ

MailApp.sendEmail({to: emailSender, replyTo: emailReplyTo, subject: subject, htmlBody: body});
}


Пишет ошибку
Не удалось отправить электронное сообщение: не указан получатель (строка 23, файл Код)Закрыть
Ответить | Ответить с цитатой | Цитировать
0 # mikes 12.06.2017 13:26
Проверьте из нужного ли столбца таблицы берется емайл получателя.
Ответить | Ответить с цитатой | Цитировать
0 # mikes 05.06.2017 12:42
Добрый день!

По какой то причине письма стали уходить со второго моего ящика гугл, можно как то в скрипте указать с какого ящика гугл нужно отправлять письма?
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 05.06.2017 20:07
По идее, отправка должна идти с активного ящика Гугла. Если Вы переключили аккаунт (т. е. сделали активным Ваш второй аккаунт) — попробуйте переключиться обратно
Ответить | Ответить с цитатой | Цитировать
+2 # mikes 06.06.2017 04:27
Вроде бы разобрался, как я понял письмо отправляется с аккаута гугл под которым был добавлен триггер в скрипте. Я зашел под 1 аккаутом (под которым должны отправляться письма), проверил что триггера нет, добавил его. В итоге стало приходить 2 одинаковых письма с разных моих аккаунтов. Зашел со второго своего аккаунта, удалил триггер. Проверил, письмо приходит с 1 аккаунта и не дублируется больше, хотя активный сейчас 2 аккаунт.

Спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 26.04.2017 03:56
Виталий доброе утро, помогите разобраться: если несколько форм Гугл собирают ответы в несколько вкладок одного догумента Spreasdsheet, то возможно ли внутри этого документа для каждой вкладки настроить самостоятельный скрипт автоматизированного ответа на почту респондентов? Мой скрипт, успешно настроенный вашей помощью, пытается отвечать на заполнение всех 3х активных вкладок, связанных с формами, но там и почта находится в разных колонках, да и ответы хотелось бы отправлять разные.. благодарю за помощь!
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 26.04.2017 07:27
Там есть функция получения ссылки на конкретную вкладку (посмотрите справку Google Script), но я бы создал отдельную таблицу под каждую форму
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 26.04.2017 08:34
Виталий, спасибо за ответ. Я в итоге так и сделал, по 1 таблице на каждую форму, но это все заявки на одно мероприятия, просто от разных классов участников, потому для удобства обработки хочется все свести в один документ. А можно вас попросить ссылочку дать на конкретную информацию по данному вопросу? А то прежде, чем к вам обратиться, я час в руководстве просидел, но так и не нашёл..
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 26.04.2017 10:11
Попробуйте перед отправкой сообщения устанавливать активный лист методом setActiveSheet. Я не тестировал, это как вариант.

developers.google.com/.../...)
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 26.04.2017 10:17
Виталий, спасибо огромное! На первый взгляд то, что надо!!!
Ответить | Ответить с цитатой | Цитировать
0 # камила 26.04.2017 03:02
здравствуйте! создала форму без особых усилий но возникла проблема с отправкой формы на мэил.ру адресаты. в чем проблема?
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 26.04.2017 07:22
Скорее всего, это проблема сервера mail.ru. У меня тоже периодически случаются такие сбои, особенно если отправляется несколько писем подряд
Ответить | Ответить с цитатой | Цитировать
0 # Валерий 20.04.2017 06:36
Виталий, большое спасибо за обратную связь!
Нельзя ли заставить скрипт как-то отправлять письма с другого негугловского smtp-сервера? Вбил в аккаунте Gmail альтернативную почту для отправки писем, сделал ее по умолчанию. Но письма из форм по-прежнему уходят mailed-by: gmail.com...
Уже бы и заплатил, чтобы снять ежедневное ограничение на 100, но понятия не имею кому и куда.
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 20.04.2017 07:22
Вот тут не подскажу. Я не пользовался платным аккаунтом Google, а перешел на FormDesigner (formdesigner.ru/)
Ответить | Ответить с цитатой | Цитировать
0 # Валерий 20.04.2017 12:52
Спасибо за ответ!
А как быть если, к примеру Виталию и Олегу из второй колонки надо отправить один текст, а пользователям с другими именами - альтернативный текст письма? Как на практике пользоваться условными операторами в Google Script? Заранее благодарен!
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 21.04.2017 10:16
что-то типа такого, как обычно в JavaScript:
if (/* ваше условие */) {
/* письмо Виталию и Олегу */
MailApp.sendEmail(...);
} else {
/* альтернативное письмо */
MailApp.sendEmail(...);
}
Ответить | Ответить с цитатой | Цитировать
0 # Валерий 22.04.2017 12:57
спасибо, так и думал, что синтаксис совпадает с JS, все получилось
Ответить | Ответить с цитатой | Цитировать
+1 # Денис 18.04.2017 11:54
Здравствуйте.
А как сделать, чтобы данные брались со второй страницы? Как я понимаю activeSheet это всегда первая страница. У меня данные копируются на вторую страницу функцией QUERY. Иначе формулы не работают. Точнее формулы стираются при добавлении данных. Хочется, чтобы отправлялись вычесленные значения.
Ответить | Ответить с цитатой | Цитировать
+1 # Денис 18.04.2017 14:46
Кажется разобрался.
var responceSheet = SpreadsheetApp.getActiveSheet();
var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PredstavlenieFormi");

Пришлось создать еще одну переменную. Формулы существуют во всех рядах. Поэтому в последнем ряде нет данных по эмейлу и имени. Имя и эмейл берется с главной страницы, а вычесленные данные с вспомогательной. Спасибо
Ответить | Ответить с цитатой | Цитировать
+1 # Валерий 17.04.2017 12:56
ОК, скрипт работает, рассылает письма в html-формате с несколькими вложениями. Но где можно глянуть какой-нибудь отчет об отправке писем?
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 17.04.2017 15:31
Отчета никакого не будет. Как вариант, Вы можете добавить еще одну строку "MailApp.sendEmail...", чтобы Вам (на Ваш адрес) приходило письмо типа "доставлено такому-то получателю", просто как уведомление. Но имейте в виду, что это –1 в счетчик общего количества отправленных писем, а их всего 100 для бесплатного аккаунта
Ответить | Ответить с цитатой | Цитировать
+1 # Анастасия 12.04.2017 12:51
у меня почему то письмо отправляется с тегами
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 13.04.2017 07:06
посмотрите на P. S. в конце статьи ;)
Ответить | Ответить с цитатой | Цитировать
+2 # Анна 07.04.2017 06:48
Виталий, спасибо огромное за ваш скрипт!
Как думаете, почему может приходить всегда сразу по 2 письма?
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 07.04.2017 11:38
Возможно, где-то дублируется строка с отправкой письма (та, где SendEmail)
Ответить | Ответить с цитатой | Цитировать
+2 # Валерий 04.04.2017 08:07
Здравствуйте!
А если еще необходимо будет прицепить вложение?
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 07.04.2017 11:44
Мне как-то нужно было прицепить отдельный HTML-файл к письму. Сделал это так:

var htmlWelcomePrice = HtmlService.createHtmlOutputFromFile('welcome').getContent();

MailApp.sendEmail({to: email, replyTo: emailReplyTo, subject: "Скачать прайс-лист", htmlBody: htmlWelcomePrice});

Возможно, это поможет.
Ответить | Ответить с цитатой | Цитировать
+1 # Дмитрий 03.04.2017 22:00
Здравствуйте!
Отличное решение - спасибо Вам.
Возникла по факту только одна любопытная проблема - когда вставляю линк на гугл файл в письме - все норм. Но когда укорачиваю его (goo.gl/gKjqUH) скрипт перестает работать и отправлять письма)) В чем тут хитрость?)
И еще микро момент - делю до строку через Но получается большой междустрочный интервал, как сделать меньше?
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 07.04.2017 11:40
По линку точно не скажу, а по интервалу - наверное, Вам нужно смотреть в сторону HTML-форматирования
Ответить | Ответить с цитатой | Цитировать
+1 # Валерий 24.03.2017 08:57
Цитирую Валерий:
Здравствуйте!
Не нашел пункта меню "Триггеры" в Ресурсах. Что делать? Спасибо


Извините, разобрался сам, нашел в другом месте
Ответить | Ответить с цитатой | Цитировать
0 # Валерий 24.03.2017 08:51
Здравствуйте!
Не нашел пункта меню "Триггеры" в Ресурсах. Что делать? Спасибо
Ответить | Ответить с цитатой | Цитировать
0 # Оксана 05.03.2017 16:09
Виталий, спасибо за помощь!
Не появилась ли возможность у Гугл отправлять заранее заготовленное письмо из почты. Форматирование хтмл не работает и письмо получается куцым...
Хотя вообще здорово, что такая возможность есть)
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 05.03.2017 16:11
Обратите внимание на P.S. в конце статьи ;)
Ответить | Ответить с цитатой | Цитировать
0 # Максим 11.01.2017 08:48
Здравствуйте!
Виталий, а подскажите, как в данном скрипте сделать, чтобы дата в письме отображалась в виде "dd.mm.yyyy".
Если более подробно, то в форме человек заполняет дату. Мне эту дату потом нужно внести в отправляемое письмо.
Кодом попытался сделать так:
// range of names, e-mails, summ:
var dataRanges = responceSheet.getRange(rows, 14, 1, 1);
dataRange.setNumberFormat("dd.mm.yyyy");

// last sender's name, e-mail,summ::
var dataSender = dataRange.getValue();

но формат все равно остается в письме Thu Mar 30 2017 00:00:00 GMT+0300 (EAT)!
Если знаете как преобразовать формат даты, буду признателен.
Ответить | Ответить с цитатой | Цитировать
0 # Владимир 05.12.2016 20:43
Добрый день, Виталий.
Подскажите, пожалуйста, возможно ли, чтобы ответ на заполненную форму приходил не с адреса аккаунта гугла () , а с адреса с другим доменом, например ? Заранее благодарен за ответ.
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 06.12.2016 12:48
Не уверен, тем более что Гугл контролирует количество отправленных писем со своего аккаунта. Вы можете указать требуемый адрес emailReplyTo для ответа на присланное сообщение:

MailApp.sendEmail({to: emailSender, replyTo: emailReplyTo, subject: subject, htmlBody: body});
Ответить | Ответить с цитатой | Цитировать
+1 # Марина 29.11.2016 12:23
Добрый день.

А если результат формы записывается не в последнюю строку в таблице ответов, а в центре, как его получить?
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 29.11.2016 14:24
Значит что-то сбилось... Как вариант, удалена часть таблицы, и счетчик количества строк уменьшился. В любом случае, найти новую запись в центре таблицы будет сложно (можно попытаться парсить Отметку времени, но это "костыли"). Попробуйте в этой же таблице создать еще один лист, скопировать туда оставшиеся данные, удалить исходный лист и переименовать новый лист "Лист 1 (копия)" в прежний "Лист 1".
Ответить | Ответить с цитатой | Цитировать
+1 # Руслан 22.11.2016 18:42
Виталий, а можна сделать что бы прыходили письма админу при появлении новых ответов
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 22.11.2016 20:32
Да, просто добавьте еще одну строку в конце:
MailApp.sendEmail({to: , replyTo: , subject: subject, htmlBody: body});
Ответить | Ответить с цитатой | Цитировать
+1 # Александр 15.11.2016 14:01
Виталий, подскажи как автоматизировать выполнения тригера? Из дебага скрипт работает, а из формы нет. У меня есть основной скрипт, который работает в форме, к нему добавил тригер, весь код ниже:
Ответить | Ответить с цитатой | Цитировать
+2 # Виталий 16.11.2016 15:57
Формально, возможность добавить скрипт в форму есть, однако мне не удалось заставить его работать. В документации Google написано, что автоматизируется скрипт связанный именно с таблицами, а не с формами, поэтому могу порекомендовать связать скрипт и триггеры с таблицей, обрабатывающей данные формы.
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 01.11.2016 12:01
Виталий, добрый день, скажите, возможно ли автоматизировать формирование счета из суммы выбранных через форму услуг и его отправку респонденту на почту?
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 01.11.2016 13:13
Да, вполне. Допустимы все основные арифметические манипуляции. Забирайте значения из полей услуг (по аналогии со строками 14, 15), суммируйте числа и формируйте счет. Будет что-то наподобие
var service1 = responceSheet.getRange(rows, 2, 1, 1).getValue();
var service2 = responceSheet.getRange(rows, 3, 1, 1).getValue();
var score = service1 + service2;
var text = "Ваш счет: " + score + " USD";
Ответить | Ответить с цитатой | Цитировать
+1 # Serg 24.08.2016 15:15
Как я понимаю, можно на 100 человек отправить максимум с одного аккаунта
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 24.08.2016 16:27
Цитирую Serg:
Как я понимаю, можно на 100 человек отправить максимум с одного аккаунта

Вот этого не скажу, не тестировал
Ответить | Ответить с цитатой | Цитировать
+1 # mikes 21.08.2016 07:07
Добрый день!

У меня не работает html-форматирование текста в теле письма, а очень хочется чтобы сообщение было приятным, в чем может быть проблема?
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 21.08.2016 09:27
Добавил P.S. в конце статьи, должно помочь.
Ответить | Ответить с цитатой | Цитировать
+1 # mikes 21.08.2016 10:52
Спасибо, Виталий! Так все работает!
Ответить | Ответить с цитатой | Цитировать
+1 # Сергей 15.08.2016 17:25
вопрос решился. проблема именно в доступе. спасибо.
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 15.08.2016 14:18
Надо еще проверить, чтобы у скрипта был полный доступ к управлению данными. Возможно, там не хватает полномочий обращаться к таблице
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 15.08.2016 14:10
Один лист.
var responceSheet = SpreadsheetApp.getActiveSheet(); стоит перед 7 строкой
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 15.08.2016 13:46
Да, есть конечно информация
Ответить | Ответить с цитатой | Цитировать
+1 # Виталий 15.08.2016 14:04
Сколько листов в таблице? Проверьте, чтобы перед строкой 7 был код
var responceSheet = SpreadsheetApp.getActiveSheet();

Похоже, что null - не удалось получить ссылку на активный лист таблицы
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 15.08.2016 11:49
а у меня что то выскакивает TypeError: Не удается вызвать метод "getLastRow" объекта null. в строке 7.
Вроде делал как написано.
Ответить | Ответить с цитатой | Цитировать
0 # Виталий 15.08.2016 13:36
Цитирую Сергей:
TypeError: Не удается вызвать метод "getLastRow" объекта null. в строке 7

а в Вашей таблице есть данные? Этот метод пытается получить последнюю строку, так что хотя бы одна строка должна присутствовать.
Ответить | Ответить с цитатой | Цитировать
+2 # Олег 10.07.2016 13:03
Очень полезная статья. Спасибо.
Ответить | Ответить с цитатой | Цитировать

Под статьей | Случайные статьи по инженерии