@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 выполнять условия и в каком формате тогда они записываются?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
  • oshliaer
    @oshliaer
    Google Top Contributor
    У вас этот код никогда не заработает нормально. Почитайте комментарии на приведенном вами ресурсе.

    Главная ошибка - это ссылка на активную Таблицу 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 согласно принимаемым параметрам.

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

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

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

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы