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