.replace函数的问题

时间:2019-05-01 18:06:20

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

因此,我有一个Google表格可以收集客户的注册数据。收集的数据中包括学生的姓名,学生选择参加的课程和信用卡号。提交后,我会收到通知。收到通知后,我进入Google工作表并从信用卡中扣除相应的金额。

信用卡付款后,我想生成一封确认邮件给客户,该邮件基于A1单元格中的文本模板,即sheet2上的(1,1),其中包括学生的姓名(范围C2),学生注册参加的课程(范围D2)和从信用卡收取的金额(范围E2)。简而言之,我想用我定义为变量的实际值替换“模板文本”中的大括号占位符(即{Name},{sessions}和{Cost})。

对于我的一生,我无法使它正常工作。

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

  

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

我已经遍及整个网络。我看过YouTube视频。我读过看似无数的在线文档,但都没有提供任何有意义的帮助。我很沮丧地试图弄清楚记录器的工作原理,但对我来说,这完全是个谜。很沮丧!

还有,我是否可以与论坛社区共享我的项目,以便在那里的人可以实际查看我的代码?我希望有一个类似于AppsForum的Apps脚本网站,可以解决有关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} // should be replaced with the value of the var "charge".

收取的金额

这是学生的名字:{Name}//Should be replaced with the value associated to the var "studentName"]

这些是学生计划参加的课程:{Sessions} //Should be the value associated with the var "sessionName".

1 个答案:

答案 0 :(得分:2)

目前,您的脚本正在尝试对其获取的任何值进行替换,但这些值不会被视为字符串,因此.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()