Сценарий электронной почты Google Sheets - отправка различных вкладок листа на основе значений столбца на основном листе

avatar
Ray Montgomery
9 августа 2021 в 04:59
39
1
0

Я пытаюсь написать сценарий, который позволит мне отправить по электронной почте список из 150 сотрудников с их индивидуальными данными о продажах за неделю.

На данный момент у меня есть главный титульный лист с колонкой для электронной почты, темы и номера магазина. Каждый номер магазина соответствует листу (вкладке) с тем же именем, например joe@gmail.com в магазине с номером 5070 имеет вкладку с именем «5070» с изменяющимися данными.

Проблема, с которой я столкнулся, связана с изменением имени таблицы переменных.

function sendEmail() {

var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('Sheet1');
var n=sheet1.getLastRow();
for (var i = 2; i < n+1 ; i++ ) {
var emailAddress = sheet1.getRange(i,1).getValue();
var subject = sheet1.getRange(i,2).getValue();
var message = sheet1.getRange(i,3).getValue();
MailApp.sendEmail(emailAddress, subject, message);
}

}

Я новичок во всем этом и искал вокруг, но не очень удачно. Заранее спасибо!

Источник
idfurw
9 августа 2021 в 05:18
1

Не могли бы вы подробнее рассказать об «изменении имени листа переменных»? Кроме того, для обычного пользователя Gmail существует квота в 100 получателей в сутки.

soMarios
9 августа 2021 в 06:32
0

Я думаю, что ваша проблема не в том, как ссылаться на имя листа. Ваш код не на самом деле отправляет какой-либо лист по электронной почте. Сначала нужно определить, в чем ваша проблема.

soMarios
9 августа 2021 в 06:36
0

Было сказано, что. Вопрос: Я хочу отправить лист очень абстрактный и здесь человеку очень сложно помочь вам, если он не знает, какие именно данные вы хотите отправить из листа.

Yuri Khristich
9 августа 2021 в 08:42
0

И на всякий случай: coderhelper.com/questions/2744520/…

Ray Montgomery
10 августа 2021 в 14:02
0

У меня есть G-Suite Я думаю, что предел 1500?

Ray Montgomery
10 августа 2021 в 14:09
0

Под отправкой листа я имею в виду: у каждого человека есть страница в листе документа. Мне нужно отправить диапазон в виде таблицы или html или однако. Но каждый адрес электронной почты в моем списке получает различный диапазон в зависимости от того, кто это. Поэтому в зависимости от электронного письма мне нужно, чтобы он ссылался на другую страницу листа. Например, Ray@gmail.com будет отправлено «Ray!A1:H20».

Ответы (1)

avatar
Yuri Khristich
9 августа 2021 в 09:32
0

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

Если вы замените это:

var message = sheet1.getRange(i,3).getValue();

с этим:

var sheet_name = sheet1.getRange(i,3).getValue();
var sheet      = ss.getSheetByName(sheet_name);
var message    = sheet.getUrl();

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

Чтобы отправить ссылку на конкретный лист электронной таблицы, вам нужно немного более сложное решение:

var sheet_name = sheet1.getRange(i,3).getValue();
var sheet      = ss.getSheetByName(sheet_name);
var message    = getSheetUrl(sheet);

function getSheetUrl(sht) {
  // credits: https://webapps.stackexchange.com/questions/93305/

  var ss = SpreadsheetApp.getActive();
  var url = '';
  sht = sht ? sht : ss.getActiveSheet();
  url = (ss.getUrl() + '#gid=' + ss.getSheetId());
  return url;
}

Но все ваши получатели все равно увидят всю электронную таблицу со всеми ее листами. Если это не то, что вам нужно, у вас есть три варианта:

Вариант 1 -- Создайте новую таблицу, скопируйте в нее данные и отправьте ссылку на эту новую таблицу.

Вариант 2 -- Создайте PDF-файл из листа и отправьте его. На самом деле вам нужно сначала выполнить Опцию 1, преобразовать новую электронную таблицу в PDF и удалить новую электронную таблицу после ее отправки (как PDF).

Вариант 3 -- сделать HTML-таблицу (или текстовую, почему бы и нет?) из данных листа и отправить таблицу.

Ray Montgomery
10 августа 2021 в 14:12
0

Вариант 3 вполне жизнеспособный, у меня есть опыт форматирования HTML. Есть ли способ сделать так, чтобы электронная почта отображалась в теле электронной почты? Он просто отправляет необработанный текст.

Yuri Khristich
10 августа 2021 в 15:58
0

Честно говоря, я еще не пробовал. Вот учебник spreadsheet.dev/send-html-email-from-google-sheets Насколько я могу судить, вам нужно добавить некоторые html-теги в обычный текст, который вы получаете от range().getValues() (<table> <tr> <td> и т. д.) и вставьте его в HTML-шаблон. Реализация и шаблон сильно зависят от имеющихся у вас данных.