переменные кажутся неопределенными, но я не могу их найти - PullRequest
0 голосов
/ 21 января 2019
Сбой сценария

с неверным адресом электронной почты: не определено (строка 29, файл "newCode")

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

Мне кажется, это может быть связано с тем, что я здесь сделал:

    var emailAddress = row[3]; // columnD

Все, что я сделал в заимствованном коде, это изменил столбец, из которого я хочу получить информацию. В этом случае адрес электронной почты. Насколько я знаю, столбец D в Google Sheets упоминается как "3" ColA = 0, ColB = 1 ... ColD = 3.

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

    function Initialize() {
      var triggers = ScriptApp.getProjectTriggers();
      for(var i in triggers) {
        ScriptApp.deleteTrigger(triggers[i]);
      } 
      ScriptApp.newTrigger("SndMail()")
      .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
      .onFormSubmit()
      .create();
    }

    // Write a value to column G for rows where an email sent successfully and sends non-duplicate emails with data from the current         spreadsheet.
    function SndMail() {
      var EMAIL_SENT = 'Sent';
      var sheet = SpreadsheetApp.getActiveSheet();
      var startRow = 2; // First row of data to process
      var numRows = 75; // Number of rows to process. 
      // Fetch the range of cells A2:G76
      var dataRange = sheet.getRange(startRow, 2, numRows);
      // Fetch values for each row in the Range.
      var data = dataRange.getValues();
      for (var i = 0; i < data.length; ++i) {
        var row = data[i];
        var emailAddress = row[3]; // columnD
        var message = 'Please create a Logistics Case and log the CAS# for: <br/> row[4 + 5]'; // columnE
    var mailout = row[6]; // columnG
        if (mailout != EMAIL_SENT) { // Prevents sending duplicates
          var subject = 'Logistics Claim case request';
          MailApp.sendEmail(emailAddress, subject, message);
          sheet.getRange(startRow + i, 3).setValue(Sent);
          // Make sure the cell is updated right away in case the script is interrupted
          SpreadsheetApp.flush();
        }
      }
    }

Что должно происходить, так это то, что при отправке формы Google лист обновляется, и запускается сценарий для отправки по электронной почте предполагаемому получателю (аддитив электронной почты в столбце D), а затем помещается текст «Отправлено» в столбец G. фильтрует последующие запуски функций, избегая повторяющихся отправок электронной почты.

1 Ответ

0 голосов
/ 21 января 2019

Как насчет этой модификации?

Точка модификации:

  • Когда значение извлекается из sheet.getRange(startRow, 2, numRows), извлекается только столбец "B".
    • Таким образом, var emailAddress = row[3] становится undefined.

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

Модифицированный скрипт:

С:
var dataRange = sheet.getRange(startRow, 2, numRows);
Кому:
var dataRange = sheet.getRange(startRow, 2, numRows, sheet.getLastColumn());

или

var dataRange = sheet.getRange(startRow, 2, numRows, 7); // A2:G76 ?

Ссылка:

Если я неправильно понял ваш вопрос, прошу прощения.

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