@ligisayan

Как настроить автоответчик писем на заполнение форм на разных языках?

Всем привет! Настроил согласно инструкциина Google Script отправку автоответчика с приветственным письмом вот так.
function sendFormByEmail(e) 
{    
  // instance of Active Spreadsheet:
  var responceSheet = SpreadsheetApp.getActiveSheet(); 
  
  // number of rows in responce form:
  var rows = responceSheet.getLastRow();
  
  // range of names, e-mails:
  var namesRange = responceSheet.getRange(rows, 2, 1, 1);
  var surnamesRange = responceSheet.getRange(rows, 3, 1, 1);
  var emailsRange = responceSheet.getRange(rows, 8, 1, 1);
  
  // last sender's name, e-mail::
  var nameSender = namesRange.getValue();
  var surnameSender = surnamesRange.getValue();
  var emailSender = emailsRange.getValue();
  
  // message ReplyTo, subject, body:
  var emailReplyTo = "manager@site.com";
  var subject = "Спасибо за Ваш интерес";
  var body = "<b>Здравствуйте, " + nameSender + surnameSender + "!</b> <br> Спасибо, что Вы с нами :)";
    
  // send the e-mails:
  MailApp.sendEmail({to: emailSender, replyTo: emailReplyTo, subject: subject, htmlBody: body});
}

Теперь у меня вопрос: в гугл таблице несколько вкладок для разных форм (русская, английская)
Как мне теперь можно отследить - на какой вкладке заполнилась таблица и в соответствии с этим отправить нужный формат письма на русском и английском соответственно.
Вроде как есть намек в
в доках google script на взаимодействие с конкретной вкладкой,
// The code below will make the 2nd sheet active in the active spreadsheet
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 SpreadsheetApp.setActiveSheet(ss.getSheets()[1]);

но я даже не знаю, есть ли возможность в google script выполнять условия и в каком формате тогда они записываются?
  • Вопрос задан
  • 2279 просмотров
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
У вас этот код никогда не заработает нормально. Почитайте комментарии на приведенном вами ресурсе.

Главная ошибка - это ссылка на активную Таблицу SpreadsheetApp.getActiveSpreadsheet(); В триггере OnFormSubmit не может быть активной Таблицы, потому что никакой пользователь ее не открыл. А если даже и открыл, то он может не быть регистратором триггера или его инициатором.

Обработка ошибок
Google Apps Script (речь о данном моменте времени развития языка) не имеет развитых методов отладки. Поэтому обвяжите основной вызов:
/**
* В Таблице должен быть лист "Лог".
* Чтобы лист существовал всегда
* https://github.com/oshliaer/google-apps-script-snippets#get-a-sheet-by-name
**/
function handler(e) {
  try {
    sendFormByEmail(getNewEmailMessage(e));
  } catch(err) {
    e.source.getSheetByName('Лог').appendRow([new Date(), err.message, err.stack]);
  }
}

Отлично, теперь все, что упало в рантайме, будет вам известно.

Текущая Таблица/Лист
Я приываю не только автора топика, но вообще всех: "Пожалуйста, не трогайте ActiveSpreadsheet, ActiveSheet и ActiveRange, т.к. это не VBA. Это #ВАЩЕ_НАФИГ_ДРУГАЯ_ВСЕЛЕННАЯ!". Обратите внимание на код выше e.source.getSheetByName(). Это все, что надо.
А вот пример комутатора:
/**
* Определение языка на основе ответа
**/
function getNewEmailMessage(e) {
  var sheet = e.range.getSheet();
  var lang = 'EN';
  switch(sheet.getName()){
    case 'RU':
       return 'Ответ на русском';
       break;
    case 'EN':
       return 'Ответ на нерусском';
       break;
  }
  return 'Ответ на русском';
}

Осталось добавить аргументов и переписать sendFormByEmail согласно принимаемым параметрам.

Триггер на несколько Форм

Вместо заключения
Только качественный и проверенный контент
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы