变量似乎未定义,但我找不到

时间:2019-01-20 21:42:26

标签: google-apps-script

脚本因电子邮件无效而失败:未定义(第29行,文件“ newCode”)

已经解决了一些错误,但仍停留在此上。 除了错误消息,我还找到了调试器选项并运行了该选项。 这没有多大意义,但这一行似乎与投诉相符。 “电子邮件地址未定义”

我觉得这可能与我在这里所做的事情有关:

    var emailAddress = row[3]; // columnD

我想我在借入的代码中所做的只是更改要从中提取信息的列。在这种情况下,电子邮件地址。据我所知,Google表格中的D列被称为“ 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列中发送电子邮件给addy),随后将文本“ Sent”发送到G列中。过滤后续功能的运行,避免重复发送电子邮件。

1 个答案:

答案 0 :(得分:1)

此修改如何?

修改点:

  • 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 ?

参考:

如果我误解了你的问题,我表示歉意。