Автоматическое письмо после заполнения формы
GalinaСТРТРИГЕР СТР2ВКЛ СТР3 СТР4 СТР5 ДОПОЛ ДИАПАЗ СТР
Взять данные из ячейки https://yandex.ru/video/preview/16388380420682306645
МОЯ ГУГЛ ТАБЛИЦА ПОДПИСНАЯ ТИЛЬДА СКРИПТ
Рассылка сложных писем
КАК СОЗДАТЬ ГУГЛ ТАБЛИЦУ В СКРИПТЕ
Скрипт рассылки
![](/file/0405308aecc5ababa22bc.png)
getrange1
getRange(row: any, column: any): SpreadsheetApp.Range
The row index of the cell to return; row indexing starts with 1.
Returns the range with the top left cell at the given coordinates.
ВИДЕО О РАССЫКЕ
https://disk.yandex.ru/d/tJzZ8iXFYK-iNQ?uid=526693543
Мои данные: гугл таблица URL
https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing
почта: finobzori@gmail.com
Команды Справочник
https://megabyte.ga/spravochnik-po-google-apps-script-osnovnye-komandy-dlya-gugl-tablic
Доступ к таблице по URL:
SpreadsheetApp.openByUrl ( url ) - доступ к электронной таблице по URL-адресу.
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/abc1234567/edit'); Logger.log ( ss.getName ( ) );
ss.getName ( ) - получить имя таблицы
Открыть таблицу, записанную в переменную
============================================
САЙТ ПРО ЛИСТ
В СПРАВОЧНИКЕ ПРО ЛИСТ
https://developers.google.com/apps-script/reference/spreadsheet/sheet?hl=ru
Доступ к листу по имени:
getSheetByName ( name) - доступ к листу по имени.
var sheet = SpreadsheetApp.getActiveSpreadsheet ( ) .getSheetByName ( "Лист2" )
УЗНАТЬ КОЛИЧЕСТВО СТРОК НА ЛИСТЕ
https://sonikelf.ru/rabotaem-s-guglotablicami-pri-pomoshhi-skriptov/
var
NumRows = sheet.getLastRow(); // узнать кол-во рядов на листе
ФУНКЦИЯ
//функция "отправляйте электронные письма"
(т. е goemail1 назовём функцию (function))
function goemails() {
ТАБЛИЦА
//Пусть ss (Переменная (Гугл таблица)):
т. е. ss обозначим допуск к таблице по URL адресу
//Вывести название гугл таблицы в журнал
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing');
Logger.log ( ss.getName ( ) );
ЛИСТ
//Пусть sheet (Переменная Лист_1):
т. е. sheet обозначим допуск к вкладке ss (это гугл таблица по URL адресу) и к листу с именем Лист_1 этой таблицы
//вывести название листа в журнал.
var sheet = ss.getSheetByName ( "Лист1" )
Logger.log (sheet.getName () );
СТРОЧКИ ЛИСТА
//Пусть emails (Переменная (Emailы строчек столбца))
т. е. emails обозначим допуск к переменной sheet (это лист_1 гугл таблицы по URL адресу)) и к диапазону на этом листе (столбец А строчки, начиная со второй до конечной)
получить данные getValue()
var emails = sheet.getRange("A2:A").getValues();
Logger.log (emails.getName () );
//Пусть subj (Вкладка (Тема письма (Одна ячейка столбца):
т. е. это допуск к вкладке sheet: (лист1 таблицы SS (гугл таблица по URL адресу))
На этом листе выбирается диапазон ячеек: в столбце F строчка 2,
получить данные getValue()
var subj = sheet.getRange("F2").getValue();
//Пусть body (Вкладка (Тело письма (Одна ячейка столбца)):
т. е. body обозначим допуск к вкладке sheet: (лист_1 гугл таблицы по URL) и к диапазону ячеек на этом листе: ячейка G2
//получить данные getValue()
var body = sheet.getRange("G2").getValue();
}
// Пусть toEmail (Вкладка (Последний Email))
т. е. toEmail обозначим допуск к вкладке sheet: (это лист_1 гугл таблицы по URL) и к диапазону ячеек на этом листе ( вкладке sheet: (это лист_1 гугл таблицы по URL) и к последнему Email в первом столбце).
получить данные getValue()
Получен email клиента из последней ячейки первого столбца листа
с адресом: последняя строка, 1 графа, - и записан в переменную:
var toEmail = sheet.getRange(sheet.getLastRow(),1).getValue();
==============================================
ОТПРАВИТЬ ПИСЬМО НА EMAIL ИЗ ПОСЛЕДНЕЙ СТРОКИ ГУГЛ ТАБЛИЦЫ
с браузера гугл почты: Galina Abramenko
finobzori@gmail.com
на Email из гул таблицы, в которую выгружаются Email из Тильды:
https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit#gid=0
СОСТАВЛЕН СКРИПТ
ФУНКЦИЯ
//функция "отправить электронное письмо"
function goemails1() {
Logger.log ( function.getName ( ) );
ТАБЛИЦА
//Текущая Гугл Таблица со своей ссылкой записана в переменную:
//Пусть ss (Вкладка (Гугл таблица)):
т. е. ss обозначим допуск к гугл таблице по URL адресу
//Вывести название гугл таблицы в журнал
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing');
Logger.log ( ss.getName ( ) );
ЛИСТ
//Лист текущей таблицы с именем "Лист1", в который загружаются ответы из формы, записан в переменную:
var sheet = ss.getSheetByName ( "Лист1" )
Logger.log (sheet.getName () );
ДИАПАЗОН ДАННЫЕ EMAIL
//Получен email клиента из последней ячейки первого столбца листа
с адресом: последняя строка, 1 графа, - и записан в переменную:
//Получены данные последней строки
var toEmail = sheet.getRange(sheet.getLastRow(),1).getValue();
или //Получим значения всех строк столбца А:
var toEmail = sheet.getRange("A2:A" + sheet.getLastRow()).getValue();
откуда: переменной myRange получим все значения нашего динамического диапазона
let myRange = sheet.getRange("A2:F" + sheet.getLastRow()).getValues();
var subject =
'Ваш запрос получен' // Тема письма
//Тело письма, отформатированное в html-разметке, записано в переменную:
var body =
'Здравствуйте! <br/> Благодарим за заявку на онлайн-курс <strong>Power BI!</strong><br/> ' +
'В ближайшее время наш менеджер свяжется с вами по указанному телефону.<br/>' +
'Подробности о системе бизнес-аналитики Power BI по ' +
'<a href = "https://finver.ru/blog/epoha-power-bi">ссылке.</a><br/>' +
'<br/><br/>' +
'С уважением, <br/> онлайн-школа Codelab';
//В описании кода приведены дополнительные пояснения относительно html-разметки
//Отправлено письмо клиенту по последнему Email (отправителем будет тот, кто запускает скрипт):
//Для отправки используется функция sendEmail (по-правильному: метод класса MailApp)
//Ссылка на подробную информацию о методе в описании к коду
MailApp.sendEmail(toEmail,subject,'',{htmlBody: body});
}
==========
SpreadsheetApp.Range
//Текущая Гугл Таблица со своей ссылкой записана в переменную:
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing');
Logger.log ( ss.getName ( ) );
var sheet = ss.getSheets()[0];
//Передача только двух аргументов возвращает "диапазон" с одной ячейкой.
var range = sheet.getRange(1, 1); // первая строка, первый столбец
var values = range.getValues();
Logger.log(values[0][0]);
==
//Текущая Гугл Таблица со своей ссылкой записана в переменную:
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing');
Logger.log ( ss.getName ( ) );
var sheet = ss.getSheets()[0];
// При этом регистрируется значение в самой последней ячейке этого листа
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var lastCell = sheet.getRange(lastRow, lastColumn);
Logger.log(lastCell.getValue());
============================
// Получаем позицию последней заполненной строки
var lastRowIndex = sheet.getLastRow();
Logger.log('lastRowIndex: ' + lastRowIndex);
=======================================
Работа с классом MailApp (отправка писем)
function myFunction10() {
// https://developers.google.com/apps-script/reference/mail/mail-app
// Отправляем простое письмо
MailApp.sendEmail({
to: 'mymail@gmail.com', // Email получателя письма
subject: 'Тема письма',
body: "Line 1\r\nLine 2\r\nLine 3", // Содержимое письма
});
-------------------------------------------------
// Отправляем письмо с прикрепленным файлом
// 1bPpy2Mm7sAffcZwSvuxOooPfrhfEWuE2 - ID Pdf файла, хранящегося на гугл диске
// Пусть pdfFileBlob Это обозначение допуска к прикрепленного файла
var pdfFileBlob = DriveApp.getFileById( '1bPpy2Mm7sAffcZwSvuxOooPfrhfEWuE2' ).getBlob();
MailApp.sendEmail({
to: 'mymail@gmail.com', // Email получателя письма
subject: 'Ваш запрос получен', // Тема письма
body: "Line 1\r\nLine 2\r\nLine 3", // Содержимое письма
// Прикрепляем файл
attachments: [pdfFileBlob]
});
}
=====================================
В конце видео скрипт
![](/file/f4a754c69167354ab1116.png)
![](/file/23a46daef331b3455f015.png)
![](/file/07950f75b02cfecfe3156.png)
О Google Apps Script
==========================================
Задача звучала так — есть постоянно обновляемый (например, формулой QUERY) список адресов электронной почты. Нам нужно по расписанию вызывать скрипт и отправлять письма только на новые адреса из этого списка.
*С бесплатного аккаунта Google Документов можно будет отправлять не более 100 писем в день
https://googlesheets.medium.com/отправляем-письма-скриптом-2-d99a1f149852
пример используемой таблицы
Скрипт:
![](/file/e2c063821db4c21094bb6.png)
function goemails() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName("лист лист лист")
var emails = sheet.getRange("c3:c").getValues()
var subj = sheet.getRange("f2").getValue()
var body = sheet.getRange("g2").getValue()
var arr = []
if(emails[0]!=''){
for(var t = 0; t < emails.length && emails[t] != ''; t++){
MailApp.sendEmail(emails[t], subj, body)
arr = [[new Date(), emails[t][0]]]
//вставляем лог
ss.getSheetByName("лог").getRange(ss.getSheetByName("лог")
.getLastRow()+1, 1, 1, 2).setValues(arr)
}
}
}
- Мы завели лист с логом отправленных писем (в примере — лист “лог”). Туда наш скрипт будет записывать адреса, на которые он отправил письма во время своего запуска и, на всякий случай, время и дату отправки.
- Список для отправки мы будем формировать функцией FILTER, функция из списка всех адресов для отправки вычтет те адреса, письма на которые уже отправлены (то есть адреса из лога) и оставит те адреса, на которые нам нужно отправить письма в следующий запуск скрипта.
В диапазоне A3:A — все адреса
В диапазоне C3:C — адреса для следующей отправки, там функция FILTER (сейчас туда попал весь список из A3:A, т.к. наш лог пуст)
F2, G2 — тема и текст для писем
=FILTER(A3:A;ISNA(MATCH(A3:A;’лог’!B3:B;0)))
https://t.me/google_sheets/102
========================================
Триггеры https://developers.google.com/apps-script/guides/triggers?hl=ru
===================================
Автоматическое письмо после заполнения формы
![](/file/156e6727a56b99659ff34.png)
![](/file/ecd4016991b76b64e9d7e.png)
![](/file/4e1d833fe0e31d298673f.png)
Мой код работает по последней строке Email гугл таблицы, загружаемой из Тильды лендинга(выполнен по коду ниже и скрин выше)
ФУНКЦИЯ
function goemails() {
ТАБЛИЦА
//Текущая Гугл Таблица записана в переменную:
var ss = SpreadsheetApp.openByUrl ( 'https://docs.google.com/spreadsheets/d/1L-9NaTpYfADURf1hR_yWJZYMcAC5p2pu-_Ioz42VAMk/edit?usp=sharing');
Logger.log ( ss.getName ( ) );
ЛИСТ
//Лист текущей таблицы с именем "Лист1 Ответы на форму (1)", в который загружаются ответы из формы, записан в переменную:
var listAnswers = ss.getSheetByName ( "Лист1" )
Logger.log (listAnswers.getName () );
СТРОКА EMAIL
//Получен email клиента из ячейки с адресом: последняя строка, 1 графа, - и записан в переменную:
var clientEmail = listAnswers.getRange(listAnswers.getLastRow(),1).getValue();
КАК ПОЛУЧИТЬ ВСЕ ЗНАЧЕНИЯ СТОЛБЦА ЕЩЁ
function doGet(e)
{
var sheet = SpreadsheetApp.openById("15hEM1czkCDs2268CmK***скрыл**ZVYGnh5_6OHxXv88");
const tmpl = sheet.getSheetByName('Лист1')
var Avals = sheet.getRange("A1:A").getValues()
var n = Avals.filter(String).length
const range = tmpl.getRange("A1:"+"A"+n);
Logger.log(range.getValues())
Logger.log(n)
}
ТЕЛО ПИСЬМА
//Тело письма, отформатированное в html-разметке, записано в переменную:
var body =
'Здравствуйте! <br/> Благодарим за заявку на онлайн-курс <strong>Power BI!</strong><br/> ' +
'В ближайшее время наш менеджер свяжется с вами по указанному телефону.<br/>' +
'Подробности о системе бизнес-аналитики Power BI по ' +
'<a href = "https://finver.ru/blog/epoha-power-bi">ссылке.</a><br/>' +
'<br/><br/>' +
'С уважением, <br/> онлайн-школа Codelab';
//В описании кода приведены дополнительные пояснения относительно html-разметки
//Отправлено письмо клиенту (отправителем будет тот, кто запускает скрипт):
//Для отправки используется функция sendEmail (по-правильному: метод класса MailApp)
//Ссылка на подробную информацию о методе в описании к коду
ПОСЛАТЬ ПИСЬМО
MailApp.sendEmail(clientEmail, "Ваш запрос получен",'',{htmlBody: body});
}
===================================================================== function sendEmailToClient() { //Текущая Гугл Таблица записана в переменную: var ss = SpreadsheetApp.getActiveSpreadsheet(); //Лист текущей таблицы с именем "Ответы на форму (1)", в который загружаются ответы из формы, записан в переменную: var listAnswers = ss.getSheetByName("Ответы на форму (1)"); //Получен email клиента из ячейки с адресом: последняя строка, 4 ряд, - и записан в переменную: var clientEmail = listAnswers.getRange(listAnswers.getLastRow(),4).getValue(); //Тело письма, отформатированное в html-разметке, записано в переменную: var body = 'Здравствуйте! <br/> Благодарим за заявку на онлайн-курс <strong>Power BI!</strong><br/> ' + 'В ближайшее время наш менеджер свяжется с вами по указанному телефону.<br/>' + 'Подробности о системе бизнес-аналитики Power BI по ' + '<a href = "https://finver.ru/blog/epoha-power-bi">ссылке.</a><br/>' + '<br/><br/>' + 'С уважением, <br/> онлайн-школа Codelab'; //В описании кода приведены дополнительные пояснения относительно html-разметки //Отправлено письмо клиенту (отправителем будет тот, кто запускает скрипт): //Для отправки используется функция sendEmail (по-правильному: метод класса MailApp) //Ссылка на подробную информацию о методе в описании к коду MailApp.sendEmail(clientEmail, "Ваша заявка получена",'',{htmlBody: body}); }
С сайта разработчика
ДАТА
Дата число
let now = new Date();
alert( now ); // показывает текущие дату и время
alert( date ); // выводит правильную дату
Как отослать простое письмо
Главная идея данного скрипта заключается
просмотр
https://docs.google.com/forms/d/e/1FAIpQLSfl0XgEnb11IFUBxyIk85nC-ETbICLQ6di7CsTcdXbkmvFdEw/viewform
Рассылатор
https://telegra.ph/Rassylator-09-15
https://telegra.ph/Opyat-subbota-opyat-otvety-02-09
еще примеры скриптов
Тригеры для перевода
8. Работа с триггером onEdit (реакция на изменения в таблице) и классом LanguageApp (перевод текста в Google Spreadsheets)
// Функция onEdit является триггером, который срабатывает при завершении ввода данных в ячейку Таблицы пользователем
// https://developers.google.com/apps-script/guides/triggers/#onedite
function onEdit(e) {
Logger.log(e);
// Получаем диапазон ячеек, в которых произошли изменения
// https://developers.google.com/apps-script/reference/spreadsheet/range
var range = e.range;
// Лист, на котором производились изменения
// https://developers.google.com/apps-script/reference/spreadsheet/sheet
var sheet = range.getSheet();
// Проверяем, нужный ли это нам лист
Logger.log(sheet.getName());
if (sheet.getName() != 'Перевод текста') {
return false;
}
// Переводить необходимо текст, введённый только в первую колонку.
// Проверяем стартовую позицию диапазона
Logger.log(range.getColumn());
if (range.getColumn() != 1) {
return false;
}
for (var i = 1; i <= range.getNumRows(); i++) {
var cell = range.getCell(
i, // номер строки
1 // номер колонки
);
// Получаем текст на русском
var russianText = cell.getValue();
// Переводим текст на английский
// https://developers.google.com/apps-script/reference/language/language-app
var translatedText = LanguageApp.translate(
russianText, // текст
'ru', // с какого языка переводим
'en' // на какой язык переводим
);
// Вставляем переведённый текст во вторую колонку
sheet.getRange(
cell.getRowIndex(), // номер строки
2 // номер столбца
).setValue(translatedText);
}
}
Создание выпадающего меню, создание сайт бара...
Привет, я хочу настроить скрипт, который отправляет электронное письмо, если ячейка в 1 столбце пуста, в той же строке, что и ячейка, у меня есть информация, которую скрипт использует для отправки электронного письма, например, адрес электронной почты и имя. У меня возникли проблемы с получением скрипта для проверки каждой ячейки в столбце и отправки электронных писем тем, которые пусты. Любая помощь приветствуется. Вот что у меня есть на данный момент:
функция SendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // Начать со второй строки, поскольку первая строка содержит метки данных
var numRows = 2; // Укажите здесь количество строк, которые вы хотите обработать
// Извлеките диапазон ячеек A2: U2
// Столбец A = адрес электронной почты, столбец B = Имя
var DataRange = sheet.getRange(startRow, 1, numRows, 21)
var cell = sheet.getRange('U2:U');
// Извлеките значения для каждой строки в диапазоне.
var data = DataRange.getValues();
если (cell.isBlank()) {
для (i в данных) {
переменная строка = данные [i];
var EmailAddress = строка[1]; // Первый столбец выбранных данных [является электронной почтой]
var message = "Привет " + строка [2] + ",\n Не могли бы вы, пожалуйста, заполнить форму':" + "\n 'вставить веб-сайт здесь'" + "\n Спасибо"; // Соберите основной текст [строка [2] - это имя]
var subject = "Отправка электронных писем из электронной таблицы";
MailApp.SendEmail(адрес электронной почты, тема, сообщение);
}
}
}
Подробные сведения
Получить данные столбца, начиная с ячейки B2 до последней заполненной строчки в таблице. Только 1 столбец
https://megabyte.ga/spravochnik-po-google-apps-script-osnovnye-komandy-dlya-gugl-tablic#1
function showColumn (){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[1];
var range = sheet.getRange(2, 2, 5); //со 2-ой ячейки начать, во 2 столбце, 5 строк
var values = range.getValues();
var range = sheet.getRange(2, 2,sheet.getLastRow()); //со 2-ой ячейки начать, во 2 столбце, получить последнюю строчку
var values = range.getValues();
for (var row in values) {
for (var col in values[row]) {
Logger.log(values[row][col]);
}
}
}
Отправка в телеграм
ЦИКЛЫ И УСЛОВИЯ
https://sonikelf.ru/kak-pisat-skripty-makrosy-i-kod-v-google-scripts-chast-2/
Здесь-то нам и пригодятся циклы. Если кратно, то цикл - это повторение какой-то операции до тех пор, пока условия цикла не будут выполнены. Основных вариантов цикла существует целых два - for и while. Их различие в том, что цикл for выполняется до тех пор, пока переменная цикла не достигнет определенного значения, а цикл while будет выполняться до тех пор, пока не будет выполнено определенное действие. При этом с циклами стоит быть несколько осторожными, т.к. очень легко создать бесконечный цикл (который будет выполняться пока ему не надоест или пока не сработает тайм-аут).
Рассмотрим пару примеров:
for
(i=0; i < 100; i++){
sum += i;
}
===========================
ГУГ ПОЧТА И ВСЁ О НЕЙ
СУММА И СРЕДНЕЕ ЗНАЧЕНИЕ
Доступ к сообщения и ярлыкам
ОТПРАВИТЬ ПИСЬМО С ПРИКРЕПЛЕННЫМ ФАЙЛОМ
отделение от списка
через кнопку