因此,我有一个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".
答案 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()