Отправка электронных писем с использованием данных на нескольких вкладках - два для циклов? - PullRequest
1 голос
/ 13 апреля 2020

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

У меня есть Google Sheet с 4 вкладками. Вкладка 1 является сводной таблицей и может быть проигнорирована. Вкладки 2-4 содержат списки адресов электронной почты и другую информацию, которую я хотел бы отправить по электронной почте. Ниже я попытаюсь создать скрипт, который перебирает все листы, кроме вкладки «Сводка», и отправляет тестовое электронное письмо на адреса электронной почты, указанные на вкладках. (Обратите внимание, что на вкладках 2-4 в столбце A размещены имена, а в столбце B - адреса электронной почты.)

В настоящее время приведенный ниже сценарий выдает « исключение: недействительный адрес электронной почты: электронная почта (строка 25, файл»). «Код») 'ошибка - заставляет меня поверить, что у меня возникли проблемы со сценарием поиска моих данных на листах.

function sendEmailLoop() {

var sheets =   SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
var range = sheet.getDataRange();

if (sheet.getName() == "Summary") //Disregard tab named 'Summary' 
{      
}
else
{    
  var range = sheet.getDataRange(); //to set the range as array
  var values = range.getDisplayValues(); //to get the value in the array
  var lastRow = range.getLastRow();
  var ss = SpreadsheetApp.getActiveSpreadsheet();  //declare the spreadsheet
  var sheet = ss.getSheetByName("Sheet1");
  var i;
  var logContent = '';

  for (i = 0; i < lastRow; i++) 
  {   
  var Name = values[i][0];       //[Name] cell A++
  var Email = values[i][1];      // [Email] cell B++

MailApp.sendEmail({
 to: Email,
 subject: Name + 'Test',
 message: 'This is a test message ' + Email + Name});

}; //end for loop - email tab data
};   // end 'else'
}); // end function(sheet)       
 } // end SendEmailLoop()  

Примечание. Я также пробовал пару похожих циклических функций, но безрезультатно:

1:

var allsheets = ss.getSheets(); 
for (var s in allsheets){  

2:

ss = SpreadsheetApp.getActiveSpreadsheet(); 
for (var i = 0; i < tabs.length; i++)

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Ответ:

Неверный диапазон, который вы извлекаете из листа для электронных писем.

Дополнительная информация:

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

enter image description here

Лог c вы Вы используете l oop по электронной почте следующим образом:

var range = sheet.getDataRange();
var values = range.getDisplayValues();
for (var i = 0; i < lastRow; i++) {   
  var Name = values[i][0];
  var Email = values[i][1];
}

Однако, поскольку вы получили весь диапазон данных, а не только те данные, которые вы хотите начиная с электронных писем, массив values также содержит заголовки - в этом случае объект выглядит следующим образом:

[[www.google.com], [], [EmpEmail], [EmpName1@blah.com], [EmpName2@blah.com]]

Таким образом, когда вы вызываете MailApp.sendEmail() и указываете Email в качестве первого из этого массива вы получаете ошибку Exception: Invalid email: Email при попытке отправить электронное письмо на www.google.com.

Исправление кода:

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

for (i = 3; i < lastRow; i++) {   
  var Name = values[i][0];
  var Email = values[i][1];

  MailApp.sendEmail({
    to: Email,
    subject: Name + Title + 'Test',
    message: 'This is a test message for the training that can be found at ' + URL});
}

Я надеюсь, что это полезно для вас !

Рекомендации:

0 голосов
/ 13 апреля 2020

Я немного переписал ваш код, и он работает для меня:

function sendEmails() {
var sheets =   SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(function(sheet) {
  if (sheet.getName() == "Sheet1") {
    var values = sheet.getDataRange().getDisplayValues();
    for (var i = 0; i < values.length; i++) {
      var Name = values[i][0];
      var Email = values[i][1]; 
      MailApp.sendEmail({
 to: Email,
 subject: Name + ' Test',
 message: 'This is a test message ' + Email + Name});
    }
}
});
}

Мой лист1 выглядит следующим образом:

name1 email1@email.com
name2 email2@email.com

Если вы все еще сталкиваетесь с той же проблемой, форматирование ячейки на вашем листе или в формате электронной почты может быть неправильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...