【问题标题】:How to get a specific column's value in the last row with data如何在数据的最后一行中获取特定列的值
【发布时间】:2019-05-14 04:11:27
【问题描述】:

我是 JS 的新手,我试图创建一个脚本,每次填写表格时都会触发一封电子邮件。电子邮件需要有一个非常具体的标题和正文,这是在我的工作表中创建的。

具体来说,我需要我的主题行是包含数据的最后一行中的 I 列,而我的电子邮件正文是 F 列。我能够让脚本选择正确的最后一行,但我很难弄清楚了解如何获取正确列的值。

我目前有一段代码我已经尝试过,但我得到了错误

TypeError:在对象 346 中找不到函数 getValue。(第 7 行,文件 “代码”)解雇

function sendEmail() {
  // Fetch the email address - This is a specific email address in the sheet I need stuff to go to 
  var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Reference").getRange("F2");
  var emailAddress = emailRange.getValues();

  // Send Alert Email.
  var message = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1").getRange("A1").getDataRegion().getLastRow().getValue() // KMS Survey Text
  var subject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1").getRange("A1").getDataRegion().getLastRow().getValue(); // KMS Survey Title
  MailApp.sendEmail(emailAddress, subject, message);

}

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    让我们更正函数的第二部分:

    // Send Alert Email.
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
    var lastRow = sheet.getRange("A1").getDataRegion().getLastRow();
    var message = sheet.getRange(lastRow, 7).getValue(); // (F column is 7-th) KMS Survey Text
    var subject = sheet.getRange(lastRow, 9).getValue(); // (I column is 9-th) KMS Survey Title
    MailApp.sendEmail(emailAddress, subject, message);
    

    错误是因为getLastRow() 方法的使用不正确。实际上它返回一个数字,而不是对象。有了一个数字,我们就可以引用所需的最后一行单元格并获取它们的值。

    此外,当范围包含单个单元格时,我建议使用getValue() 方法而不是getValues()

    【讨论】:

      【解决方案2】:

      这将完全符合您的要求。我已经清理了你的一些变量,因为获取活动的电子表格,然后是工作表,然后是范围等不是好的做法。您可以定义一次,然后根据需要使用定义的变量来获取不同的范围。

      function sendEmail() {
        var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        var refSheet = spreadsheet.getSheetByName('Reference');
        var formSheet = spreadsheet.getSheetByName('Form Responses 1');
      
        var lastRow = formSheet.getDataRange().getLastRow();
        var subject = formSheet.getRange(lastRow, 6).getValue(); //KMS Survey Text
        var message = formSheet.getRange(lastRow, 9).getValue(); //KMS Survey Title
        var emailAddress = refSheet.getRange("F2").getValue();
      
        // Send Alert Email.
        MailApp.sendEmail(emailAddress, subject, message);
      }
      

      您可以在工作表上使用getDataRange() 而不是getRange().getDataRegion().getLastRow(),以获取您当前在工作表上获得的整个数据范围,然后在其上使用getLastRow(),而不是像:

      var lastRow = formSheet.getDataRange().getLastRow();
      

      然后使用它来获取电子邮件的数据范围,注意:getRange() 行/列从 1 开始索引,因此 F 列 = 6,I 列 = 9:

      var subject = formSheet.getRange(lastRow, 6).getValue(); //KMS Survey Text
      var message = formSheet.getRange(lastRow, 9).getValue(); //KMS Survey Title
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-02
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多