Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Для отправки электронной почты из Google Таблиц требуется использование скрипта Google Apps. Но не волнуйтесь, если вы никогда раньше не создавали ни одного скрипта Google Apps, отправить электронное письмо очень просто.

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

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

Независимо от приложения, этот сценарий убедителен. Это также сэкономит вам время на ручное отслеживание обновлений электронных таблиц.

Шаг 1. Отправка электронного письма с помощью Google Таблиц

Прежде чем вы сможете создать скрипт Google Apps для отправки электронной почты из Google Sheets , вам также потребуется адрес электронной почты Gmail, к которому скрипт Google Apps получит доступ для отправки электронных писем с предупреждениями.

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

Просто добавьте столбец имени и столбец электронной почты и заполните их именем человека, которому вы хотите получать оповещение по электронной почте.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

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

Чтобы попасть в редактор скриптов, нажмите « Инструменты », а затем нажмите « Редактор скриптов » .

Вы увидите окно скрипта с функцией по умолчанию, которая называется  myFunction() . Переименуйте это в SendEmail() .

Затем вставьте следующий код в функцию SendEmail():

// Fetch the email address var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2"); var emailAddress = emailRange.getValues(); // Send Alert Email. var message = 'This is your Alert email!'; // Second column var subject = 'Your Google Spreadsheet Alert'; MailApp.sendEmail(emailAddress, subject, message);

Вот как работает этот код:

  • getRange и getValues ​​извлекают значение из ячейки, указанной в методе getRange.
  • var message и var subject определяют текст, из которого будет создано оповещение по электронной почте.
  • Функция MailApp.sendEmail , наконец, выполняет функцию отправки электронной почты Google Scripts с использованием вашей подключенной учетной записи Google.

Сохраните сценарий, щелкнув значок диска , а затем запустите его, щелкнув значок запуска (стрелка вправо).

Имейте в виду, что Google Script требуется разрешение на доступ к вашей учетной записи Gmail для отправки электронной почты. Таким образом, при первом запуске скрипта вы можете увидеть предупреждение, как показано ниже.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Нажмите «Просмотреть разрешения» , и вы увидите еще один экран с предупреждением, который вам нужно обойти.

Этот экран предупреждения появляется из-за того, что вы пишете собственный скрипт Google, который не зарегистрирован как официальный.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Просто нажмите « Дополнительно », а затем нажмите ссылку « Перейти к SendEmail (небезопасно)» .

Вам нужно будет сделать это только один раз. Ваш скрипт будет запущен, и на адрес электронной почты, указанный вами в электронной таблице, будет отправлено электронное письмо, подобное приведенному ниже.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Шаг 2. Чтение значения из ячейки в Google Sheets

Теперь, когда вы успешно написали скрипт Google Apps, который может отправлять оповещение по электронной почте, пришло время сделать это оповещение более функциональным.

Следующий шаг, который вы узнаете, — это как считать значение данных из электронной таблицы Google, проверить значение и вывести всплывающее сообщение, если это значение выше или ниже верхнего предела.

Прежде чем вы сможете это сделать, вам нужно создать еще один лист в электронной таблице Google, с которой вы работаете. Назовите этот новый лист «Мой отчет».

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Имейте в виду, что ячейка D2 — это та, которую вы хотите проверить и сравнить. Представьте, что вы хотите каждый месяц знать, упали ли ваши общие продажи ниже 16 000 долларов.

Давайте создадим скрипт Google Apps, который сделает это.

Вернитесь в окно редактора сценариев, нажав « Инструменты », а затем « Редактор сценариев» .

Если вы используете ту же электронную таблицу, у вас все еще будет  функция SendEmail() . Вырежьте этот код и вставьте его в Блокнот. Он понадобится вам позже.

Вставьте следующую функцию в окно кода.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); var ui = SpreadsheetApp.getUi(); // Check totals sales if (monthSales < 16000){="" ui.alert('sales="" too="" low!');="" }="">

Как работает этот код:

  • Загрузите значение из ячейки D2 в переменную monthSales .
  • Оператор IF сравнивает месячные продажи в ячейке D2 с 16 000 долларов США.
  • Если значение превышает 16 000, код вызовет окно сообщения браузера с предупреждением.

Сохраните этот код и запустите его. Если все работает правильно, вы должны увидеть следующее предупреждающее сообщение в своем браузере.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Теперь, когда у вас есть скрипт Google Apps, который может отправлять оповещения по электронной почте, и еще один скрипт, который может сравнивать значения из электронной таблицы, вы готовы объединить их и отправить оповещение вместо того, чтобы инициировать оповещение.

Шаг 3: Собираем все вместе

Теперь пришло время объединить два сценария, которые вы создали, в один сценарий.

К этому моменту у вас должна быть электронная таблица с вкладкой Sheet1, которая содержит получателя оповещения по электронной почте. Другая вкладка под названием MyReport содержит всю информацию о ваших продажах.

Вернувшись в редактор сценариев, пришло время применить все, что вы узнали, на практике.

Замените весь код в редакторе сценариев двумя вашими функциями, отредактированными, как показано здесь.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); // Check totals sales if (monthSales < 16000){="" fetch="" the="" email="" address="" var="" emailrange="SpreadsheetApp.getActiveSpreadsheet().getSheetByName(" sheet1").getrange("b2");"="" var="" emailaddress="emailRange.getValues();" send="" alert="" email.="" var="" message='This month your sales were ' +="" monthsales;="" second="" column="" var="" subject='Low Sales Alert' ;="" mailapp.sendemail(emailaddress,="" subject,="" message);="" }="">

Обратите внимание на правки здесь.

Внутри оператора IF вставьте скрипт SendEmail внутри функции CheckSales() внутри скобок оператора if.

Во-вторых, соедините переменную monthSales с конкатенацией сообщения электронной почты, используя символ + .

Осталось только запускать функцию CheckSales() каждый месяц.

Для этого в редакторе скриптов:

  1. Нажмите пункт меню « Правка », а затем нажмите «Триггеры текущего проекта» .
  2. В нижней части экрана нажмите « Создать новый триггер » .
  3. Выберите функцию CheckSales для запуска.
  4. Измените источник событий Select на управляемый временем .
  5. Измените  тип триггера по времени на « Таймер месяца» .

Щелкните Сохранить , чтобы завершить триггер.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Каждый месяц ваш новый скрипт будет запускаться и сравнивать общую сумму месячных продаж в ячейке D2 с 16 000 долларов США.

Если он меньше, он отправит оповещение по электронной почте, уведомляющее вас о низких ежемесячных продажах.

Используйте Google Таблицы для отправки электронной почты на основе значения ячейки

Как видите, скрипты Google Apps содержат множество функций в небольшом пакете. С помощью всего нескольких простых строк кода вы можете делать удивительные вещи.

Если вы хотите еще немного поэкспериментировать, попробуйте добавить предел сравнения в 16 000 долларов в другую ячейку электронной таблицы, а затем прочтите его в своем сценарии, прежде чем проводить сравнение. Таким образом, вы можете изменить лимит, просто изменив значение на листе.

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

Автоматизация процесса

Пока все хорошо, но приведенный выше скрипт будет запускаться вручную только в том случае, если мы не установим никаких триггеров. К счастью, Google упростил настройку триггерной автоматизации. Вот шаги. 

В редакторе Apps Script нажмите значок Триггеры на левой боковой панели (он выглядит как маленькие часы).

Нажмите ссылку Создать новый триггерr или Добавить триггер в правом нижнем углу страницы "Триггеры".

В раскрывающемся меню Выберите функцию для запуска выберите sendEmails< функция i=4> .

В раскрывающемся меню Выбрать источник событий выберите Управляемый по времени.

В раскрывающемся меню Выберите тип триггера по времени выберите нужную частоту (например, Дневной таймер для ежедневных писем, Недельный таймер для еженедельных писем и т. д.).

Если применимо, выберите желаемый временной диапазон или день недели.

Нажмите Сохранить , чтобы создать триггер.

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

Что касается данного триггера, поскольку в нашем примере речь идет об отправке напоминаний о счетах, мы предполагаем, что они происходят ежемесячно, и целесообразно отправлять их каждое 1-е число месяца с 13:00 до 14:00. Но, конечно, вы можете изменить частоту и время в зависимости от ваших потребностей. 

Как отправить электронное письмо с вложением

Чтобы показать вам, как отправлять электронные письма с вложениями, мы повторно используем пример листа с напоминаниями о счетах и ​​реорганизуем фрагмент, включив в него вложения. Теперь мы начинаем с функции, а шаблон электронного письма находится позже в коде. отправитьEmailНапоминания

Следует подчеркнуть, что приведенный ниже фрагмент извлекает вложения электронной почты из папки Google Диска, где очень важно указать идентификатор папки и следовать данному соглашению об именах. Подробнее об этом читайте в разделе Давайте разберем раздел кода

function sendEmailReminders() { // Получаем активный лист varsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Получаем диапазон данных (исключая строку заголовка) var dataRange =sheet.getRange(2, 1,sheet.getLastRow() - 1,sheet.getLastColumn()); // Получаем значения из диапазона данных var data = dataRange.getValues(); // Проходим по строкам данных for (var i = 0; i < data.length; i++) { var row = data[i]; // Получаем значения из каждого столбца var businessName = row[0]; вар электронная почта = строка [1]; вар счета-фактуры = строка [2]; вар счет-фактураAmount = строка [3]; вар DueDate = строка [4]; вар тема = строка [5]; // Тело письма var emailBody = "Дорогой" + название компании + ",\n\n" + "Напоминаем, что счет №" + номер счета + " за $" + Сумма счета + " подлежит оплате " + DueDate + ".\n" + "Найдите приложенный счет.\n\n" + "Спасибо за оперативное внимание к этому вопросу."; // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } // Отправляем электронное письмо с вложением MailApp.sendEmail({ to: email, subject: subject, body: emailBody, Attachments: [invoiceFile] }); } }

Давайте разберем код

1. Определите функцию: sendEmailReminders.

функция sendEmailReminders() {

В этой строке объявляется функция с именем , которая будет содержать код для отправки напоминаний по электронной почте с вложениями.sendEmailReminders.

2. Получите активный лист:

var лист = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

Эта строка извлекает активный лист из открытого в данный момент документа Google Sheets.

3. Получите диапазон данных (исключая строку заголовка):

var dataRange =sheet.getRange(2, 1,sheet.getLastRow() - 1,sheet.getLastColumn());

Эта строка получает диапазон данных на листе, исключая строку заголовка. Он начинается со второй строки (строка 2) и первого столбца (столбец 1) и продолжается до последней строки и последнего столбца листа.

Примечание. При создании пользовательского листа вам необходимо изменить его в соответствии с вашим листом. диапазон данных

4. Получите значения из диапазона данных:

данные var = dataRange.getValues();

Эта строка извлекает значения (содержимое) из диапазона ячеек, определенного на предыдущем шаге.

5. Прокрутите строки данных:

for (var i = 0; i < data.length; i++) { var row = data[i];

Этот цикл перебирает каждую строку массива. Переменная представляет текущую строку данных в каждой итерации.fordatarow

6. Получите значения из каждого столбца:

вар businessName = строка [0]; вар электронная почта = строка [1]; вар счета-фактуры = строка [2]; вар счет-фактураAmount = строка [3]; вар DueDate = строка [4]; вар тема = строка [5];

Строки выше извлекают значения из каждого столбца текущей строки данных. Каждое значение позже присваивается переменной для удобства использования в сценарии. Указанные значения являются пользовательскими для нашего примерного листа. 

7. Создайте тело письма:

var emailBody = "Дорогой" + название компании + ",\n\n" + "Напоминаем, что счет №" + номер счета + " за $" + Сумма счета + " подлежит оплате " + DueDate + ".\n" + "Найдите приложенный счет.\n\n" + "Спасибо за оперативное внимание к этому вопросу.";

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

8. Получите соответствующий файл счета:

var billFolderId = 'ВАША_ПАПКА_ID_ЗДЕСЬ'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); вар счетФайл; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { console.error("Файл счета-фактуры не найден для номера счета: " +voiceNumber); продолжать; }

Эти строки извлекают файл счета, связанный с текущей строкой. 

Во-первых, доступ к папке с файлами счетов осуществляется по ее идентификатору папки. Обязательно замените фактический идентификатор папки. ВАШ_ПАПКА_ID_ЗДЕСЬ

Обратите внимание, что в нашем примере используется соглашение об именах, а фактический счет-фактура называется «123456.pdf». Если ваши вложенные файлы называются по-другому, вам необходимо обновить форматирование. (Номер счета + '.pdf')

Затем скрипт ищет файл с тем же именем, что и номер счета-фактуры (при условии, что файл имеет формат PDF). 

Если файл найден, он присваивается переменной; в противном случае сценарий регистрирует сообщение об ошибке и переходит к следующей строке.invoiceFile

9. Отправьте электронное письмо с вложением:

MailApp.sendEmail({to: электронная почта, тема: тема, тело: emailBody, вложения: [invoiceFile] });

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

Отправьте электронное письмо в формате HTML с помощью GSheets

Чтобы отправить электронное письмо в формате HTML, вы можете внести несколько довольно простых изменений в ранее описанный сценарий. Вот: 

function sendEmailReminders() { // Получаем активный лист varsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Получаем диапазон данных (исключая строку заголовка) var dataRange =sheet.getRange(2, 1,sheet.getLastRow() - 1,sheet.getLastColumn()); // Получаем значения из диапазона данных var data = dataRange.getValues(); // Проходим по строкам данных for (var i = 0; i < data.length; i++) { var row = data[i]; // Получаем значения из каждого столбца var businessName = row[0]; вар электронная почта = строка [1]; вар счета-фактуры = строка [2]; вар счет-фактураAmount = строка [3]; вар DueDate = строка [4]; вар тема = строка [5]; // Тело электронного письма в формате HTML var emailBodyHtml = "<p>Уважаемый " + название компании + ",</p>" + "<p>Это напоминание о том, что счет №" + номер счета + " за $" + Сумма счета + " подлежит оплате " + DueDate + ".</p>" + "<p>Найдите прикрепленный счет.</p>" + "<p>Спасибо за оперативное внимание к этому вопросу.</p>"; // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } // Отправляем электронное письмо с вложением MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, Attachments: [invoiceFile] }); } }

В этой версии обычный текст заменяется переменной, содержащей контент в формате HTML. электронная почтаBodyemailBodyHtml

При вызове функции свойство body также заменяется свойством, которое отправит электронное письмо в формате HTML.MailApp.sendEmail()htmlBody

Боковые примечания: 

Мы используем вместо в скрипте для удобства. Любой вариант подойдет, хотя, безусловно, более читабелен. В любом случае, не стесняйтесь переформатировать скрипт и заменить оператор конкатенации заполнителями при интерполяции строк. varconstconst${выражение}

Кроме того, ни один из скриптов не содержит функций, поскольку они не нужны для наших примеров. Но, конечно, эти типы скриптов также можно добавлять и даже автоматизировать. BCBCCC

Наконец, вы можете оживить ситуацию, добавив собственные стили CSS (см. обновленную функцию ниже). вар emailBodyHtml =

// Тело письма в формате HTML со стилями CSS var emailBodyHtml = "<html><head><style>" + "body {семейство шрифтов: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: полужирный; цвет: #4a4a4a;}" + "</style></head><body>" + "<p>Уважаемый <span class='invoice-info'>" + название компании + "</span>,</p>" + "<p>Напоминаем, что Invoice #<span class='invoice-info'>" + номер счета + "</span> для $<span class='invoice-info'>" + инвойс-сумма + "</span> подлежит оплате до <span class='invoice-info'>" + DueDate + "</span>.</p>" + "<p>Найдите прикрепленный счет.</p>" + "<p>Спасибо за оперативное внимание к этому вопросу.</p>" + "</body></html>";

Советы профессионалов: 

  • Будьте осторожны с , некоторые поставщики почтовых ящиков могут не поддерживать и отображать сильно стилизованные электронные письма должным образом или вообще не поддерживать. <стиль>
  • Используйте тестирование электронной почты Mailtrap , чтобы узнать, насколько поставщики почтовых ящиков поддерживают ваши электронные письма в формате HTML. 
  • Еще раз подчеркну: Если вам нужно отправить большой объем, всегда лучше использовать правильный MTA вместо функции. отправитьэлектронную почту
  • В связи с этим помните об ограничениях вашей учетной записи Gmail. Они различаются для Google Workspace и/или вашей личной учетной записи. 

Как отправлять триггерные письма из Google Таблиц?

Когда ячейка достигает определенного значения

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

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

Имейте в виду, что сценарий тот же, который мы использовали для отправки электронных писем и вложений в формате HTML. Но у него есть еще один уровень функциональности для внедрения описанной условной логики. Вот код. 

function sendEmailReminders() { // Получаем активный лист varsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Получаем диапазон данных (исключая строку заголовка) var dataRange =sheet.getRange(2, 1,sheet.getLastRow() - 1,sheet.getLastColumn()); // Получаем значения из диапазона данных var data = dataRange.getValues(); // Проходим по строкам данных for (var i = 0; i < data.length; i++) { var row = data[i]; // Получаем значения из каждого столбца var businessName = row[0]; вар электронная почта = строка [1]; вар счета-фактуры = строка [2]; вар счет-фактураAmount = строка [3]; вар DueDate = строка [4]; вар тема = строка [5]; // Определить тело электронного письма на основе суммы счета var emailBodyHtml; if (invoiceAmount == 0) { // Тема электронного письма об оттоке клиента = "Уведомление об оттоке клиента"; emailBodyHtml = "<html><head><style>" + "body {семейство шрифтов: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: полужирный; цвет: #4a4a4a;}" + "</style></head><body>" + "<p>Дорогой " + название компании + ",</p>" + "<p>Мы заметили, что сумма вашего счета составляет 0 долларов США. Нам жаль, что вы ушли, и мы будем признательны за любые отзывы о том, почему вы решили прекратить использование наших услуг.</p>" + "<p>Если мы можем что-то сделать, чтобы улучшить наши услуги или вернуть ваш бизнес, сообщите нам об этом.</p>" + "<p>Спасибо за ваши прошлые дела.</p>" + "</body></html>"; } else { // Обычное электронное письмо со счетом-фактурой emailBodyHtml = "<html><head><style>" + "body {семейство шрифтов: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: полужирный; цвет: #4a4a4a;}" + "</style></head><body>" + "<p>Уважаемый <span class='invoice-info'>" + название компании + "</span>,</p>" + "<p>Напоминаем, что Invoice #<span class='invoice-info'>" + номер счета + "</span> для $<span class='invoice-info'>" + инвойс-сумма + "</span> подлежит оплате до <span class='invoice-info'>" + DueDate + "</span>.</p>" + "<p>Найдите прикрепленный счет.</p>" + "<p>Спасибо за оперативное внимание к этому вопросу.</p>" + "</body></html>"; } // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext ()) {voiceFile = счетФайлы.следующий(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } // Отправляем электронное письмо с вложением MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, Attachments: [invoiceFile] }); } }

Вплоть до взлома кода 

Обратите внимание, что мы фокусируемся только на том, что находится в функции, чтобы не повторять то, что уже было описано. электронная почтаBodyHtml

Обновленная часть кода определяет содержимое тела электронного письма на основе суммы счета. Если сумма счета равна  , предполагается, что это отходящий клиент, и используется другой шаблон электронного письма. Вот разбивка кода: «0»

вар emailBodyHtml;

Он объявляет переменную с именем и сохраняет содержимое тела электронного письма. И изначально он оставлен неопределённым.emailBodyHtml.

если (invoiceAmount == 0) { ... }

Оператор проверяет, равна ли сумма счета 0. Если это так, код внутри фигурных скобок будет выполнен. Этот блок содержит шаблон электронной почты оттока клиента.if(`{}`)

subject = "Уведомление об оттоке клиентов";

В этой строке задается тема электронного письма для отходящих клиентов. "Уведомление об оттоке клиентов"

emailBodyHtml = "<html><head><style>" + ...

 В этой строке задается значение переменной для шаблона электронного письма об оттоке клиентов. Шаблон представляет собой строку HTML со стилями CSS, определенными в этом разделе. Тело электронного письма содержит заполнители для названия компании и сообщения для клиента.emailBodyHtml<head>

} еще { ... }

Блок выполняется, когда сумма счета не равна 0. Он устанавливает переменную в шаблон электронного письма с обычным счетом. Шаблон электронного письма представляет собой строку HTML со стилями CSS, определенными в этом разделе. Тело электронного письма содержит заполнители для названия компании, номера счета, суммы счета и даты оплаты.elseemailBodyHtml<head>

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

Когда значение ячейки меняется

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

Поясним: идея состоит в том, что каждый месяц у менеджера по работе с клиентами создается новый лист (в нашем примере — лист 2) с учетными данными клиентов. 

Теперь код сравнит два листа и отправит автоматическое электронное письмо с благодарностью вместо обычного электронного письма со счетом клиентам, которые обновили версию (их Сумма счета) a>  больше по сравнению с предыдущим). 

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

function sendEmailReminders() { varsheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1"); varsheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист2"); var dataRange1 = лист1.getRange(2, 1, лист1.getLastRow() - 1, лист1.getLastColumn()); var dataRange2 =sheet2.getRange(2, 1,sheet2.getLastRow() - 1,sheet2.getLastColumn()); вар data1 = dataRange1.getValues(); вар data2 = dataRange2.getValues(); for (var i = 0; i < data1.length; i++) { var row1 = data1[i]; вар row2 = data2[i]; вар businessName = row1[0]; вар электронная почта = row1[1]; вар номер счета = row1 [2]; var billAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(',', 39;.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Неверные суммы счетов для бизнеса: " + businessName + ". счета-фактуры1: " + счета-фактуры1 + ", счета-фактуры2: " + счета-фактуры2 ); продолжать; } вар DueDate = row1[4]; вар тема; вар emailBodyHtml; if (invoiceAmount1 <voiceAmount2) { console.log("Отправка сообщения «Спасибо за обновление» по электронной почте на адрес " + email + ".voiceAmount1: " +voiceAmount1 + ",voiceAmount2: " + Сумма счета2); subject = "Спасибо за обновление"; emailBodyHtml = "<html><body>" + "<p>Дорогой " + название компании + ",</p>" + "<p>Спасибо за обновление! Мы ценим ваш бизнес и с нетерпением ждем возможности помочь вам.</p>" + "<p>С уважением,</p>" + "<p>Ваша компания</p>" + "</body></html>"; MailApp.sendEmail({to: электронная почта, тема: тема, htmlBody: emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Отправка уведомления об оттоке клиента' по электронной почте на адрес " + email + ".voiceAmount1: " +voiceAmount1); subject = "Уведомление об оттоке клиентов"; emailBodyHtml = "<html><head><style>" + "body {семейство шрифтов: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: полужирный; цвет: #4a4a4a;}" + "</style></head><body>" + "<p>Дорогой " + название компании + ",</p>" + "<p>Мы заметили, что сумма вашего счета составляет 0 долларов США. Нам жаль, что вы ушли, и мы будем признательны за любые отзывы о том, почему вы решили прекратить использование наших услуг.</p>" + "<p>Если мы можем что-то сделать, чтобы улучшить наши услуги или вернуть ваш бизнес, сообщите нам об этом.</p>" + "<p>Спасибо за ваши прошлые дела.</p>" + "</body></html>"; MailApp.sendEmail({ to: электронная почта, тема: тема, htmlBody:emailBodyHtml }); } else { console.log("Отправка 'Напоминания о счете' по электронной почте на адрес " + электронная почта + ". счета-фактуры1: " + счета-фактуры1 + ", счета-фактуры2: " + счета-фактуры2); subject = "Напоминание о счете"; emailBodyHtml = "<html><head><style>" + "body {семейство шрифтов: Arial, sans-serif;}" + "p {font-size: 14px;}" + ".invoice-info {font-weight: полужирный; цвет: #4a4a4a;}" + "</style></head><body>" "<p>Уважаемый <span class='invoice-info'>" + название компании + "</span>,</p>" + "<p>Напоминаем, что Invoice #<span class='invoice-info'>" + номер счета + "</span> для $<span class='invoice-info'>" + инвойс-сумма1 + "</span> подлежит оплате до <span class='invoice-info'>" + DueDate + "</span>.</p>" + "<p>Найдите прикрепленный счет.</p>" + "<p>Спасибо за оперативное внимание к этому вопросу.</p>" + "</body></html>"; // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } MailApp.sendEmail({to: электронная почта, тема: тема, htmlBody: emailBodyHtml, вложения: [invoiceFile] }); } } }</p>" + "</body></html>"; // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } MailApp.sendEmail({to: электронная почта, тема: тема, htmlBody: emailBodyHtml, вложения: [invoiceFile] }); } } }</p>" + "</body></html>"; // Прикрепите соответствующий счет. Вам необходимо указать правильный идентификатор папки, в которой хранятся ваши счета. var billFolderId = 'YOUR_FOLDER_ID_HERE'; вар счетFolder = DriveApp.getFolderById(invoiceFolderId); var счетФайлы = счетФайлыFolder.getFilesByName(invoiceNumber + '.pdf'); // Предполагаем, что файлы счетов имеют формат PDF var voiceFile; если (invoiceFiles.hasNext()) {voiceFile =voiceFiles.next(); } else { // Если файл счета-фактуры не найден, вы можете пропустить эту строку или зарегистрировать ошибку console.error("Файл счета-фактуры не найден для номера счета-фактуры: " +voiceNumber); продолжать; } MailApp.sendEmail({to: электронная почта, тема: тема, htmlBody: emailBodyHtml, вложения: [invoiceFile] }); } } }

Вплоть до взлома кода 

1. Скрипт начинается с получения ссылок на Лист1 и Лист2.

varsheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1"); varsheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист2");

2. Затем он извлекает данные из обоих листов, начиная со второй строки, чтобы исключить заголовки.

var dataRange1 = лист1.getRange(2, 1, лист1.getLastRow() - 1, лист1.getLastColumn()); var dataRange2 =sheet2.getRange(2, 1,sheet2.getLastRow() - 1,sheet2.getLastColumn()); вар data1 = dataRange1.getValues(); вар data2 = dataRange2.getValues();

3. Скрипт перебирает строки на обоих листах (при условии, что количество строк на обоих листах одинаковое). Он сравнивает суммы счетов из Листа 1 и Листа 2 для каждой соответствующей строки.

for (var i = 0; i < data1.length; i++) { var row1 = data1[i]; вар row2 = data2[i]; // Получаем суммы счетов из обоих листов var billAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.'));

Копировать

4. Затем скрипт проверяет условия отправки различных типов электронных писем на основе сравнения сумм счетов на Листе1 и Листе2.

if (invoiceAmount1 <voiceAmount2) { // Отправляем «Спасибо за обновление»; email } else if (invoiceAmount1 == 0) { // Отправляем «Уведомление об оттоке клиентов»; email } else { // Отправляем «Напоминание о счете»; электронная почта }

Копировать

Ключевое сравнение — , которое проверяет, меньше ли сумма счета на Листе 1, чем сумма счета на Листе 2 для той же строки (т. е. для того же клиента). Если это правда, сценарий предполагает, что клиент обновился, и отправляет электронное письмо. В противном случае он проверяет наличие других условий (отток или регулярные напоминания о счетах) и отправляет соответствующее электронное письмо.

Когда файл Google Sheets обновляется

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

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

Хорошо, есть гораздо лучшие способы обработки заказов и запросов клиентов. Но мы будем придерживаться этого подхода ради урока.

Шаг 1

Сначала нам нужно создать таблицу. Как показано ниже, наш вариант довольно прост и содержит всего три строки с «Менеджером», «Временным интервалом» и «Запросом».

Шаг 2

Далее вам нужны скрипты Google для запуска электронных писем всякий раз, когда кто-то обновляет таблицу со своим запросом, таким образом резервируя место. Вот пример. 

//@OnlyCurrentDoc functionprocessEdit(e) { MailApp.sendEmail({ to: "[email protected]" ;, subject: «Новое бронирование — временной интервал клиента», body: «Клиент имеет к вам вопрос». });

Копировать

Чтобы помочь вам понять, что происходит, стоит обсудить основные функции. 

  • //@OnlyCurrentDoc – эта аннотация сигнализирует о том, что вы хотите, чтобы скрипт запускался только в указанном Google Sheet. Удаление аннотации включило скрипт в другие ваши файлы. 
  • functionprocessEdit() – триггер (настроим на следующем шаге) запускает скрипт с этой функцией. Проще говоря, функция устанавливает процесс получения электронного письма каждый раз, когда кто-то обновляет таблицу.
  • (e)  – данная аннотация представляет собой объект с данными о внесенных изменениях. У него есть свойство диапазона, которое сигнализирует о том, что диапазон или ячейка были отредактированы. 
  • MailApp – объект, который функция использует для ретрансляции электронной почты. 

Прежде чем двигаться дальше, вы можете протестировать лист и код. Если вы используете примерный лист, просто заполните одну из ячеек в столбце «Запрос» и запустите скрипт. Письмо должно поступить в ваш почтовый ящик немедленно, но имейте в виду, что сценарий еще не автоматизирован.

Шаг 3

Пришло время установить и авторизовать триггер для автоматической отправки электронных писем. В Apps Script щелкните значок будильника в боковом меню. Затем нажмите «…создать новый триггер». 

Во всплывающем окне конфигурации триггера выберите следующие критерии.

  • процессПравить
  • Голова
  • Из таблицы
  • При редактировании

Примечание. Оставьте Настройки уведомления о сбое по умолчанию, но вы можете изменить их. это при необходимости. Это не повлияет на общую работу триггера или скрипта. Это может относиться к любому скрипту Google, который вы, возможно, захотите автоматизировать. 

Нажмите Сохранить, авторизуйте триггер в своей учетной записи, и вы увидите его в  Список триггеров . Кроме того, не забудьте нажать кнопку Развернуть , чтобы активировать триггер. 

Теперь вы можете вернуться к листу, заполнить еще одну ячейку в столбце «Запрос» и проверить, получили ли вы автоматическое уведомление. 

Примечание. Вы можете настроить таблицу по своему вкусу, но это означает, что вам также потребуется настроить скрипт.

Tags: #HOW-TO

Имбирь 2.7.53.0

Имбирь 2.7.53.0

Ginger — бесплатная программа для проверки орфографии и грамматики.

Блоки

Блоки

Blocks — это интеллектуальная игра для учащихся 3-го класса начальной школы, позволяющая тренировать навыки обнаружения и зрения. Учителя включили ее в программу поддержки преподавания информационных технологий.

Прези 6.26

Прези 6.26

Prezi — бесплатное приложение, позволяющее создавать цифровые презентации как онлайн, так и офлайн.

Матвей

Матвей

Mathway — очень полезное приложение, которое поможет вам решить все математические задачи, требующие более сложного инструмента, чем встроенный калькулятор вашего устройства.

Adobe Презентер

Adobe Презентер

Adobe Presenter — это программное обеспечение для электронного обучения, выпущенное Adobe Systems, доступное на платформе Microsoft Windows в виде подключаемого модуля Microsoft PowerPoint.

Тукан 2.3.0

Тукан 2.3.0

Toucan — образовательная технологическая платформа. Это позволяет вам изучать новый язык, просматривая обычные повседневные веб-сайты.

ENetВьет 24.2

ENetВьет 24.2

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

Дуолинго

Дуолинго

Duolingo — Изучайте языки бесплатно, или просто Duolingo, — это образовательная программа, позволяющая изучать и практиковать множество разных языков.

RapidTyping

RapidTyping

RapidTyping — это удобный и простой в использовании инструмент для тренировки клавиатуры, который поможет вам улучшить скорость набора текста и уменьшить количество ошибок в правописании. Благодаря урокам, организованным для разных уровней, RapidTyping научит вас печатать или улучшить имеющиеся навыки.

МатТип 7.4.10.53

МатТип 7.4.10.53

MathType — это интерактивное программное обеспечение для уравнений от разработчика Design Science (Dessci), которое позволяет создавать и комментировать математические обозначения для обработки текста, презентаций, электронного обучения и т. д. Этот редактор также используется для создания документов TeX, LaTeX и MathML.