Автоматическое письмо после заполнения формы

Автоматическое письмо после заполнения формы

Galina

СТР1

СТРТРИГЕР СТР2ВКЛ СТР3 СТР4 СТР5 ДОПОЛ ДИАПАЗ СТР

Взять данные из ячейки https://yandex.ru/video/preview/16388380420682306645

МОЯ ГУГЛ ТАБЛИЦА ПОДПИСНАЯ ТИЛЬДА СКРИПТ

ПРИЛОЖЕНИЕ ГУГЛ

Рассылка сложных писем

СЦЕНАРИИ

КАК СОЗДАТЬ ГУГЛ ТАБЛИЦУ В СКРИПТЕ

Скрипт рассылки

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

ЕЩЕ_1 ЕЩЕ_2

Мои данные: гугл таблица 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 ( ) - получить имя таблицы

Открыть таблицу, записанную в переменную

SpreadsheetApp.open ( file )

============================================

САЙТ ПРО ЛИСТ

В СПРАВОЧНИКЕ ПРО ЛИСТ

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 (отправка писем)


https://codd-wd.ru/shpargalka-dopolneniya-dlya-google-tablic-spreadsheets-i-ispolzovanie-google-apps-script/#p2

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]

    });

 }

=====================================

В конце видео скрипт





О Google Apps Script

==========================================

Задача звучала так — есть постоянно обновляемый (например, формулой QUERY) список адресов электронной почты. Нам нужно по расписанию вызывать скрипт и отправлять письма только на новые адреса из этого списка.

*С бесплатного аккаунта Google Документов можно будет отправлять не более 100 писем в день

https://googlesheets.medium.com/отправляем-письма-скриптом-2-d99a1f149852

пример используемой таблицы

Скрипт:

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)

}

}

}

  1. Мы завели лист с логом отправленных писем (в примере — лист “лог”). Туда наш скрипт будет записывать адреса, на которые он отправил письма во время своего запуска и, на всякий случай, время и дату отправки.
  2. Список для отправки мы будем формировать функцией 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

===================================

Автоматическое письмо после заполнения формы


https://megabyte.ga/google-apps-script-primery-skriptov-s-poyasneniyami#avtomaticheskoe-pismo-posle-zapolneniya-formy




Мой код работает по последней строке 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?usp=sf_link

просмотр

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

еще примеры скриптов

https://codd-wd.ru/shpargalka-dopolneniya-dlya-google-tablic-spreadsheets-i-ispolzovanie-google-apps-script/#p1


Тригеры для перевода

https://codd-wd.ru/shpargalka-dopolneniya-dlya-google-tablic-spreadsheets-i-ispolzovanie-google-apps-script/#p1

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);

  }

 

}

Создание выпадающего меню, создание сайт бара...

https://codd-wd.ru/shpargalka-dopolneniya-dlya-google-tablic-spreadsheets-i-ispolzovanie-google-apps-script/#p1


Привет, я хочу настроить скрипт, который отправляет электронное письмо, если ячейка в 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://pastebin.com/X0V2yGHQ

ЦИКЛЫ И УСЛОВИЯ

https://sonikelf.ru/kak-pisat-skripty-makrosy-i-kod-v-google-scripts-chast-2/

https://sonikelf.ru/kak-pisat-skripty-makrosy-i-kod-v-google-scripts-chast-2/#tsikly-i-usloviya-google-scripts

Здесь-то нам и пригодятся циклы. Если кратно, то цикл - это повторение какой-то операции до тех пор, пока условия цикла не будут выполнены. Основных вариантов цикла существует целых два - for и while. Их различие в том, что цикл for выполняется до тех пор, пока переменная цикла не достигнет определенного значения, а цикл while будет выполняться до тех пор, пока не будет выполнено определенное действие. При этом с циклами стоит быть несколько осторожными, т.к. очень легко создать бесконечный цикл (который будет выполняться пока ему не надоест или пока не сработает тайм-аут).

Рассмотрим пару примеров:

for (i=0; i < 100; i++){

    sum += i;

}

===========================

ГУГ ПОЧТА И ВСЁ О НЕЙ

СУММА И СРЕДНЕЕ ЗНАЧЕНИЕ

Доступ к сообщения и ярлыкам

ОТПРАВИТЬ ПИСЬМО С ПРИКРЕПЛЕННЫМ ФАЙЛОМ

отделение от списка

через кнопку

Report Page