Javascript 替换函数的问题

Javascript 替换函数的问题,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,所以我有一个谷歌表格,收集客户的注册数据。收集的数据包括学生姓名、学生选择参加的课程以及信用卡号。一旦提交,我就会收到通知。一接到通知,我就去我的谷歌工作表,向信用卡收取适当的费用 信用卡收费后,我想向客户发送一封确认电子邮件,该电子邮件基于单元格A1中的文本模板,即表单2上的(1,1),其中包括学生姓名(范围C2)、学生注册参加的课程(范围D2)和信用卡收费金额(范围E2)。简单地说,我想用我定义为变量的实际值替换“模板文本”(即{Name}、{sessions}和{Cost})中的花括号占位

所以我有一个谷歌表格,收集客户的注册数据。收集的数据包括学生姓名、学生选择参加的课程以及信用卡号。一旦提交,我就会收到通知。一接到通知,我就去我的谷歌工作表,向信用卡收取适当的费用

信用卡收费后,我想向客户发送一封确认电子邮件,该电子邮件基于单元格A1中的文本模板,即表单2上的(1,1),其中包括学生姓名(范围C2)、学生注册参加的课程(范围D2)和信用卡收费金额(范围E2)。简单地说,我想用我定义为变量的实际值替换“模板文本”(即{Name}、{sessions}和{Cost})中的花括号占位符

就我的一生而言,我无法让它发挥作用

以下是我尝试运行此代码时得到的错误详细信息:

类型错误:在对象中找不到函数替换。这是电子邮件正文。这是向信用卡收取的金额:{Cost}

我一直在网上关注这个问题。我看了YouTube视频。我读了大量的在线文档,但没有一个提供任何有意义的帮助。我一直在试图弄清楚记录器是如何工作的,但这对我来说仍然是个谜。非常沮丧

还有,有没有一种方法可以让我与论坛社区分享我的项目,这样有人就可以真正查看我的代码了???我希望有一个应用程序脚本的网站,可以像ExcelForum一样处理有关VBA编程的问题

function SendEmail2() {
  // fetch these values as you need
  var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2").getValues();
  var studentRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("C2").getValues();
  var sessionRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("D2").getValues();
  var chargeAmt = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2").getValues();

  var studentName = studentRange;
  var sessionName = sessionRange;
  var emailAddress = emailRange;
  var charge = chargeAmt;

  var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template").getRange(1,1).getValues();

  // This is what needed to change
  var emailText = templateText
     .replace("{Name}", studentName)
     .replace("{Sessions}", sessionName)
     .replace("{Cost}", charge);

  var subject = 'Junior Golf Clinic Registration Receipt';
  var message = emailText;

  MailApp.sendEmail(emailAddress, subject, message); 

}

这是电子邮件正文

这是信用卡的费用
{Cost}
//应替换为var“费用”的值。

这是学生的姓名:
{name}
//应替换为与变量“studentName”关联的值]


这些是学生计划参加的课程:
{sessions}
//应该是与var“sessionName”关联的值。

此时脚本正试图对其获得的任何值进行替换,但这些值未被视为字符串,因此。替换将无法按预期工作

尝试使用如下所示的.toString(),我还清理了脚本中的一些其他变量,因为没有真正的理由定义它们然后重命名它们

function SendEmail2() {

  //spreadsheet variables
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = spreadsheet.getSheetByName("Sheet1");

  //fetch values from spreadsheet
  var emailAddress = dataSheet.getRange("B2").getValues();
  var studentName = dataSheet.getRange("C2").getValues();
  var sessionName = dataSheet.getRange("D2").getValues();
  var charge = dataSheet.getRange("E2").getValues();
  var templateText = spreadsheet.getSheetByName("Template").getRange(1,1).getValues();

  //get templateText as string and replace values with variables defined above
  var emailText = templateText.toString()
     .replace("{Name}", studentName)
     .replace("{Sessions}", sessionName)
     .replace("{Cost}", charge);

  var subject = 'Junior Golf Clinic Registration Receipt';
  var message = emailText;

  MailApp.sendEmail(emailAddress, subject, message); 
}
如您所见,我在替换开始时添加了.toString():

var emailText = templateText.toString()

目前,您的脚本正在尝试对其获得的任何值进行替换,但是这些值没有被视为字符串,因此。replace将无法按预期工作

尝试使用如下所示的.toString(),我还清理了脚本中的一些其他变量,因为没有真正的理由定义它们然后重命名它们

function SendEmail2() {

  //spreadsheet variables
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = spreadsheet.getSheetByName("Sheet1");

  //fetch values from spreadsheet
  var emailAddress = dataSheet.getRange("B2").getValues();
  var studentName = dataSheet.getRange("C2").getValues();
  var sessionName = dataSheet.getRange("D2").getValues();
  var charge = dataSheet.getRange("E2").getValues();
  var templateText = spreadsheet.getSheetByName("Template").getRange(1,1).getValues();

  //get templateText as string and replace values with variables defined above
  var emailText = templateText.toString()
     .replace("{Name}", studentName)
     .replace("{Sessions}", sessionName)
     .replace("{Cost}", charge);

  var subject = 'Junior Golf Clinic Registration Receipt';
  var message = emailText;

  MailApp.sendEmail(emailAddress, subject, message); 
}
如您所见,我在替换开始时添加了.toString():

var emailText = templateText.toString()

非常感谢你,罗斯!它工作得非常完美。更重要的是,我理解你在代码中所做的更改,因此我也学到了一些东西!太好了,很高兴我能提供帮助。如果你满意,请将此标记为你问题的答案。非常感谢你,罗斯!它工作得非常完美。更重要的是,我非常理解你在代码中所做的更改我也学到了一些东西!太好了,很高兴我能帮上忙。如果您满意,请将此标记为您问题的答案。