Я все еще изучаю основы здесь и надеялся, что кто-нибудь любезно предложит лучший способ решения этой проблемы (я искал решение, но безуспешно!):

У меня очень простая таблица:

Столбец A: адреса электронной почты; Столбец B: сообщения для отправки. (Столбец A создается с использованием формулы, которая извлекает несколько адресов электронной почты из более длинного списка адресов в Sheet2.)

Sheet2 содержит «главный» список всех адресов электронной почты. - Столбец A: Имя; Столбец B: адрес электронной почты.

Я использую приведенный ниже код в качестве отправной точки. Он отправляет электронные письма по адресам в Sheet1 и помечает ячейки в столбце C с помощью «EMAIL_SENT» всякий раз, когда отправляется электронное письмо (или, скорее, когда сценарий завершает обработку этой строки).

Я хотел бы подсчитать общее количество электронных писем, отправленных каждому человеку в столбце C Листа 2, однако я не знаю, как лучше всего подойти к этому, или, если честно, куда Начните!

function sendEmails() {

  var sheet = SpreadsheetApp.getSheetByName('Sheet1');
  var EMAIL_SENT = "EMAIL_SENT";
  var startRow = 1;  // First row of data to process
  var dataRange = sheet.getDataRange()
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var emailSent = row[2];     // Third column

    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates

      var subject = "Sending emails from a Spreadsheet";

      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();  
}
}
}

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

Кто-нибудь может пролить свет на это? Любые предложения будут очень признательны.

Большое спасибо за внимание.

0
Vin 10 Фев 2013 в 21:09

1 ответ

Лучший ответ

Шаг 1. Найдите строку в Sheet2, где находится это электронное письмо.

var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var numRows = sheet2.getDataRange().getNumRows();
var emailList = sheet2.getRange(1,2,numRows,1).getValues();
var emailRow = -1;
for (var j=0; j<numRows; j++) {        
  if (emailList[j][0]==WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR) {
    emailRow = j;
    break;
  }
}
if (emailRow==-1) { /*ERROR! Couldn't find email.*/ }

Шаг 2. Получите старое количество писем.

var oldValue = sheet2.getRange(emailRow+1,3).getValue();

Шаг 3: Введите новое значение +1.

sheet2.getRange(emailRow+1,3).setValue(oldValue+1);

Примечание: emailRow отсчитывается от нуля, а getRange () - от единицы.

1
Phil Bozak 11 Фев 2013 в 07:13
Привет, Фил! Спасибо за решение. К сожалению, я не могу заставить код перебирать все электронные письма в Sheet1. Он работал до того, как я добавил ваш код, так что я полагаю, я помещаю ваш код не в то место? Скажите, пожалуйста, почему это не работает: я заменил WHATEVER_EMAIL_YOU_ARE_LOOKING_FOR на emailAddress и добавил код Step1 внизу своего скрипта, непосредственно в SpreadsheetApp.flush ();. Я вставил код шага 2 и 3 под кодом шага 1 прямо в раздел «{/ * ERROR! Не удалось найти электронную почту. * /}». Заранее спасибо.
 – 
Vin
11 Фев 2013 в 02:05
Извинения. Это потому, что я случайно повторно использовал переменную i. Измените все времена, когда я использовал i на шаге 1. Это должно исправить. Я обновлю свой ответ.
 – 
Phil Bozak
11 Фев 2013 в 05:12
Большое спасибо, Фил. Скрипт теперь работает отлично. Приношу свои извинения за то, что не заметил этого!
 – 
Vin
11 Фев 2013 в 05:51
Я только что заметил другое «i», которое нужно заменить, и я не могу его редактировать, так как оно меньше 6 символов. Это внутри: "for (var j = 0; i <numRows; j ++) {". Кроме того, не должно ли быть j <= numRows, а не j <numRows?
 – 
Vin
11 Фев 2013 в 06:34
Починил это. =) Теперь все лучше.
 – 
Phil Bozak
11 Фев 2013 в 07:14