涉及“ .replace”功能的语法问题

时间:2019-05-01 15:21:30

标签: javascript

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

从信用卡中扣款后,我想向客户生成一封确认电子邮件,其中包括学生的姓名,学生注册参加的课程以及从信用卡中扣款的金额。

我的代码似乎工作正常,除了要用我定义为变量的实际值替换“模板文本”中的大括号占位符(即{Name},{sessions}和{ChargeAmount})。



Note:  When I just replace {StudentName} with text like "Joe" it works.  However, {Sessions} does not get replaced and neither does {ChargeAmount}.  I think this is a syntax error.

这是我真正想发生的事情,但无法开始工作:

var emailText = templateText.replace(“ {Name}”,studentName); templateText.replace(“ {Sessions}”,sessionName); templateText.replace(“ {ChargeAmount}”,ChgAmt);


function SendEmail() {
 // Fetch the email address

var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2");
var studentRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("C2");
var studentName = studentRange.getValues();
var sessionRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("D2");
var sessionName = sessionRange.getValues();
var emailAddress = emailRange.getValues();
var ChgAmt = Browser.inputBox("Charge Amount");
var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template").getRange(1,1).getValue();

  // NOTE!  What I really want to do is replace {Name} with the var "studentName"... not the text "Joe", {Sessions} with the var "sessionName" and {ChargeAmount} with the var "ChgAmt". I can't this to work either!  STRUGGLING!!!

var emailText = templateText.replace("{StudentName}","Joe");templateText.replace("{Sessions}","May - Session#1");templateText.replace("{ChargeAmount}","$500");

// Send Alert Email.
var subject = 'Junior Golf Clinic Registration Receipt';
var message = emailText;

MailApp.sendEmail(emailAddress, subject, message); 


}

这是我现有代码的结果,无法正确提取所需的值。

useremail@gmail.com
9:18 AM (37 minutes ago)
to me

This is the email body.

This is the amount charged to credit card {ChargeAmount}.  [Not right.  This should be the actual value represented by the var "ChgAmt"]

This is the student's name: Joe  [this seems to work when I replace the placeholder {Name} with text like "Joe" but not when I try to replace the placeholder {Name} with the var "studentName"]

These are the sessions the student is scheduled to attend: {Sessions}  
[Not right.  This should be the actual sessions represented by the var "sessionName"]

Here's more information about the clinics themselves.

2 个答案:

答案 0 :(得分:2)

此行是不正确的,您实际上并不会存储其他replace语句。

var emailText = templateText.replace("{StudentName}","Joe");templateText.replace("{Sessions}","May - Session#1");templateText.replace("{ChargeAmount}","$500");

应该是:

var emailText = templateText.replace("{StudentName}","Joe").replace("{Sessions}","May - Session#1").replace("{ChargeAmount}","$500");

答案 1 :(得分:0)

正如jmcgriz所指出的那样,问题在于分别调用.replace。链接它们可以解决您的问题。

下面是一些伪代码,显示了可能是什么样子:

function SendEmail() {
  // fetch these values as you need
  var studentName = 'Joe'
  var sessionName = "May - Session#1";
  var emailAddress = 'joe@joe.com'
  var chargeAmt = "$500";

  // This is what needed to change
  var emailText = templateText
     .replace("{StudentName}", studentName)
     .replace("{Sessions}", sessionName)
     .replace("{ChargeAmount}", chargeAmt);

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

  MailApp.sendEmail(emailAddress, subject, message); 
}

SendEmail()
<script>
// Mocking MailApp for testing

const MailApp = {
  sendEmail: (addr, subj, mess) => 
    console.log(`Sending "${addr}" email "${subj}"\n\n${mess}`)
}

const templateText = `
This is the email body.

This is the amount charged to credit card {ChargeAmount}.

This is the student's name: {StudentName}

These are the sessions the student is scheduled to attend: {Sessions}  

Here's more information about the clinics themselves.`


</script>