如何使用数据获取最后一行中特定列的值

时间:2019-05-14 04:11:27

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

我是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);

}

2 个答案:

答案 0 :(得分:0)

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

// 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()

答案 1 :(得分:0)

这将完全满足您的需求。我已经清理了一些变量,因为先不要激活电子表格,然后是工作表,再到范围等。您可以定义一次,然后使用定义的变量随意获取不同的范围。

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