首页 > 解决方案 > 如何在数据的最后一行中获取特定列的值

问题描述

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

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

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

类型错误:在对象 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);

}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


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

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);
}

而不是getRange().getDataRegion().getLastRow(),您可以在工作表上使用getDataRange()来获取当前在工作表上获得的整个数据范围,然后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

推荐阅读