Проблема с функцией .replace - PullRequest
0 голосов
/ 01 мая 2019

Итак, у меня есть Google лист, который собирает регистрационные данные от клиентов. В собранные данные включены имя студента, сеанс, который студент выбрал для посещения, и номер кредитной карты. После отправки я получаю уведомление. После уведомления я перехожу на свой лист Google и списываю с кредитной карты соответствующую сумму.

После того, как с кредитной карты была снята оплата, я хочу сгенерировать электронное письмо с подтверждением для клиента, основанное на текстовом шаблоне в ячейке A1, т. Е. (1,1) на листе 2, который включает имя студента ( Диапазон C2), сеанс, который студент зарегистрировался для посещения (диапазон D2), и сумма, списанная с кредитной карты (диапазон E2). Проще говоря, я хочу заменить фигурные скобки в моем «тексте шаблона» (то есть {Name}, {session} и {Cost} фактическими значениями, которые я определил как переменные.

Ради жизни я не могу заставить это работать.

Вот подробности ошибки, которые я получаю, когда пытаюсь запустить этот код:

Ошибка типа: не удается найти функцию замены в объекте Это тело письма. Эта сумма списывается с кредитной карты: {Стоимость}.

Я был в интернете по этому поводу. Я смотрел видео на YouTube. Я прочитал то, что похоже на горы онлайн-документации, ни одна из которых не оказала никакой значимой помощи. Я расстроился, пытаясь понять, как работает регистратор, и все же, для меня это полная загадка. Очень расстроен!

Кроме того, есть ли способ, которым я могу поделиться своим проектом с форумом, чтобы кто-то там мог реально посмотреть на мой код в действии ??? Хотелось бы, чтобы был сайт для Apps Script, который работает как 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} // 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 Ответ

2 голосов
/ 01 мая 2019

В данный момент ваш скрипт пытается заменить любые значения, которые он получает, но значения не обрабатываются как строка, поэтому .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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...