Почему мой код Google Script начинается с неправильной строки? - PullRequest
0 голосов
/ 18 марта 2019

Итак, я работал над проектом, который включает в себя код, который автоматически отправляет электронные письма.Код должен написать «Email Sent» в крайнем правом столбце, кроме каждого баланса.

Итак, вот моя функция автоматической отправки электронной почты и ссылка на электронную таблицу: https://docs.google.com/spreadsheets/d/14ukVvpMh0dJr5_HLUYxK1n4m6HXd2tvAj-bMrixAQFg/edit?usp=sharing

    function sendEmails() { 
  var EMAIL_SENT = "EMAIL SENT"
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Control_Mens")  
  var dataRange = sheet.getRange(2, 2, 61, 16) 
  var data = dataRange.getValues();
  for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[0];
    var message = row[1]; 
    var emailSent = row[15]
    if (emailSent != EMAIL_SENT){
      var subject = "Subject"; 
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(2 + i, 17).setValue(EMAIL_SENT);
    }
  } 
}

Хотя я думаю, что могу подсчитать что-то неправильно (например, еще одну строку и т.наоборот), я запускал его несколько раз, он отправляет электронное письмо всем на листе, но он пишет только «EMAIL SENT» рядом с конкретными людьми.

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Проблема

Я полагаю, проблема, о которой вы сказали в заголовке: i - строка.Сценарий ниже.

var data = ["data1", "data2", "data3"];
for (i in data){
Logger.log(typeof i);
}

Все i являются строками.Когда i (1, 2, 3) - строка, sheet.getRange(2 + i, 17) - это

  • sheet.getRange("21", 17).getA1Notation(); Это Q21.
  • sheet.getRange("22", 17).getA1Notation(); Это Q22.
  • sheet.getRange("23", 17).getA1Notation(); Это Q23.

Это является причиной проблемы.Эта проблема не записывает «EMAIL SENT» в строку отправленного электронного письма.

Решение

Использование i типа номера.

  1. Поставьте i = Number(i); нижеfor (i in data) {.
  2. Заменить for (i in data) на for (var i=0; i<data.length; i++).Это ответ Купера.
0 голосов
/ 18 марта 2019

Я проверил ваш код следующим образом, и он отлично работает:

У меня есть пара настроек.

function sendEmails() { 
  var EMAIL_SENT="EMAIL SENT";
  var sh=SpreadsheetApp.getActive().getSheetByName("Sheet95");  
  var rg=sh.getRange(2, 2, 61, 16); 
  var data=rg.getValues();
  var s='';
  for (var i=0;i<data.length;i++) { 
    var row=data[i]; 
    var emailAddress=row[0];
    var message=row[1]; 
    var emailSent=row[15];
    if (emailSent!=EMAIL_SENT){
      var subject=row[2];//added this just to test the data position 
      //MailApp.sendEmail(emailAddress, subject, message);
       s+=Utilities.formatString('<br />EmailAddress:%s<br />Subject: %s<br />Message:%s<br /><hr width="100%">',emailAddress,subject,message);
      sh.getRange(2 + i, 17).setValue(EMAIL_SENT);
    }
  } 
  var userInterface=HtmlService.createHtmlOutput(s);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Emails')
}

Интересно, если вы используете переменную i где-то еще в проекте, и поскольку вы фактически не объявляете i, это может быть выбор глобального значения из другого места в проекте. Просто угадай.

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