GoogleAppScript:

SendMail from Form näidis

  1. On tehtud ilus ja oma väljadega vorm (TÄHIS! üks väli on email)

2. GoogleTable salvestab vormisisestused

3. Lisame GoogleAppsScript

function sendEmailToClient() {

    //Текущая Гугл Таблица записана в переменную:
    var ss = SpreadsheetApp.getActiveSpreadsheet();

    //Лист текущей таблицы с именем "Ответы на форму (1)", в который загружаются ответы из формы, записан в переменную:
    var listAnswers = ss.getSheetByName("Avaldus007 (vastus)");

    //Получен email клиента из ячейки с адресом: последняя строка, 4 ряд, - и записан в переменную:
    var clientEmail = listAnswers.getRange(listAnswers.getLastRow(),2).getValue();

     // найдем Имя человека
    var nimi = listAnswers.getRange(listAnswers.getLastRow(), 3).getValue();

    // Последняя прочиталая книга
    var viimane = listAnswers.getRange(listAnswers.getLastRow(), 4).getValue();

    // valik - viimane rida kolmas veerg
    var valik = listAnswers.getRange(listAnswers.getLastRow(),5).getValue();

    // любимая фраза с книги
    var lause = listAnswers.getRange(listAnswers.getLastRow(),6).getValue();

    //Оценка опросника
    var hind = listAnswers.getRange(listAnswers.getLastRow(), 7).getValue();


    //Тело письма, отформатированное в html-разметке, записано в переменную:
    var bodyvalik1 =
    '<strong>📚 Tere, lugemissõber ' + nimi + '! 😊</strong><br/><br/>' +
    'Raamatud rikastavad meie hinge ja avardavad sisemaailma! 🌟<br/>' +
    'Kas pole imeline, et iga uus raamat viib meid uuele rännakule? 🚀📖<br/><br/>' +
    '<strong>📌 Sinu viimane raamat: </strong> ' + viimane + '<br/>' +
    '<strong>📚 Veel mida sulle meeldib lugeda: </strong> ' + valik + '<br/>' +
    '<strong>💬 Sinu lemmiklause: </strong> "' + lause + '"<br/><br/>' +
    '<strong>⭐️ Täname, et hindasite minu küsimustikku: </strong> "' + hind + '"<br/><br/>' +
    '☀️ Ilusat lugemist ja rõõmsaid hetki! <br/><br/>' +
    '📖 Sinu raamatusõber, <br/> Jekaterina Guzek 📚<br/>' +
    '🔗 <a href="https://jekaterinaguzek24.thkit.ee/">Minu leht</a>';

    var bodyvalik2 =
    '<strong>📚 Tere, lugemissõber ' + nimi + '! 😊</strong><br/><br/>' +
    'Kahju, et viimasest lugemisest on möödunud nii palju aega. 😢<br/>' +
    'Aga tead, suurepärane raamat ootab sind alati avastamiseks! 📖✨<br/><br/>' +
    '<strong>📌 Sinu viimane loetud raamat: </strong> ' + viimane + '<br/>' +
    'Kas sa mäletad, milliseid tundeid see sinus tekitas? 💭💖<br/><br/>' +
    '<strong>📚 Veel mida sulle meeldib lugeda: </strong> ' + valik + '<br/>' +
    '<strong>💬 Sinu lemmiklause: </strong> "' + lause + '"<br/><br/>' +
    '<strong>⭐️ Täname, et hindasite minu küsimustikku: </strong> "' + hind + '"<br/><br/>' +
    '📖 Võta taas raamat kätte ja naudi uusi lugemishetki! 📚☕<br/><br/>' +
    '🌞 Ilusat päeva, <br/> Jekaterina Guzek 📚<br/>' +
    '🔗 <a href="https://jekaterinaguzek24.thkit.ee/">Minu leht</a>';

    var bodyvalik3 =
    '<strong>📚 Tere, ' + nimi + '! 😊</strong><br/><br/>' +
    'Mõnikord pole midagi paremat kui võtta ette mõni huvitav raamat ja sukelduda selle maailma! 🌍📖<br/>' +
    'Kui soovid soovitusi või abi raamatu valimisel, kirjuta meile julgelt – leiame sulle midagi toredat! 📚🤩<br/><br/>' +
    '<strong>📚 Sinu lugemiseelistused: </strong> ' + valik + '<br/>' +
    '<strong>💬 Sinu lemmiklause: </strong> "' + lause + '"<br/><br/>' +
    '<strong>⭐️ Täname, et hindasite minu küsimustikku: </strong> "' + hind + '"<br/><br/>' +
    '🌞 Rõõmsaid lugemishetki ja inspireerivaid leide! 💛📖<br/><br/>' +
    '📖 Parimate soovidega, <br/> Jekaterina Guzek 📚<br/>' +
    '🔗 <a href="https://jekaterinaguzek24.thkit.ee/">Minu leht</a>';

    var bodyvalimata =
    '<strong>📚 Tere, ' + nimi + '! 😊</strong><br/><br/>' +
    'Näib, et sa ei märkinud, kui kaua sa raamatuid lugenud oled. 📖❓<br/>' +
    'Aga ära muretse, tähtis on see, et lugemine pakub rõõmu! 😊💡<br/><br/>' +
    '📖 Kui soovid jagada oma lugemiselamusi või otsid uut põnevat raamatut, olen alati siin, et aidata! 📚✨<br/><br/>' +
    '🌞 Rõõmsaid lugemishetki! <br/><br/>' +
    '📖 Parimate soovidega, <br/> Jekaterina Guzek 📚<br/>' +
    '🔗 <a href="https://jekaterinaguzek24.thkit.ee/">Minu leht</a>';

    var body;

    //Tingimused
    if(viimane == 'Täna/eile'){body=bodyvalik1}
    else if(viimane == 'Nädal tagasi'){body=bodyvalik2}
    else if(viimane == 'Väga kaua aega tagasi'){body=bodyvalik3}
    else {body=bodyvalimata}

    MailApp.sendEmail(clientEmail, "Teie avaldus on kätte saadud ❤️",'',{htmlBody: body});

    }

Minu Vorm: https://forms.gle/ii7eeUBWgZ9fyYy68

Töötamine päästikuga onEdit (vastus tabeli muudatustele) ja LanguageApp klassiga

Teeme lahti exel siis google appScript

kirjutame ilus kood:

// Функция onEdit является триггером, который срабатывает при завершении ввода данных в ячейку Таблицы пользователем
// https://developers.google.com/apps-script/guides/triggers/#onedite
function onEdit(e) {
  Logger.log(e);
 
  // Получаем диапазон ячеек, в которых произошли изменения
  // https://developers.google.com/apps-script/reference/spreadsheet/range
  var range = e.range;
 
  // Лист, на котором производились изменения
  // https://developers.google.com/apps-script/reference/spreadsheet/sheet
  var sheet = range.getSheet();
 
  // Проверяем, нужный ли это нам лист
  Logger.log(sheet.getName());
  if (sheet.getName() != 'Перевод текста') {
    return false;
  }
 
  // Переводить необходимо текст, введённый только в первую колонку.
  // Проверяем стартовую позицию диапазона
  Logger.log(range.getColumn());
  if  (range.getColumn() != 1) {
    return false;
  }
 
  for (var i = 1; i <= range.getNumRows(); i++) {
    var cell = range.getCell(
      i, // номер строки
      1 // номер колонки
    );
 
    // Получаем текст на русском
    var russianText = cell.getValue();
 
    // Переводим текст на английский
    // https://developers.google.com/apps-script/reference/language/language-app
    // https://cloud.google.com/translate/docs/languages
    var translatedText = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'en' // на какой язык переводим
    );

    var translatedText2 = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'et' // на какой язык переводим
    );

    var translatedText3 = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'fr' // на какой язык переводим
    );

     var translatedText4 = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'nl' // на какой язык переводим
    );
 
 
    // Вставляем переведённый текст во вторую колонку
    sheet.getRange(
      cell.getRowIndex(), // номер строки
      2 // номер столбца
    ).setValue(translatedText);

// Вставляем переведённый текст во третью колонку
    sheet.getRange(
      cell.getRowIndex(), // номер строки
      3 // номер столбца
    ).setValue(translatedText2);

    // Вставляем переведённый текст во четвертую колонку
    sheet.getRange(
      cell.getRowIndex(), // номер строки
      4 // номер столбца
    ).setValue(translatedText3);

    // Вставляем переведённый текст во четвертую колонку
    sheet.getRange(
      cell.getRowIndex(), // номер строки
      5 // номер столбца
    ).setValue(translatedText4);

  }
 
}

Edasi salvesatme, ja provime

NB! kui kirjutab viga , ikka töötab

 var range = e.range;

Kontrollime

Uue menüü koostamine

Mul on kaks näided:

// Функция onOpen() запускается всегда при открытии документа
// https://developers.google.com/apps-script/guides/triggers/#onopen
function onOpen() {
 
  // Создаём новое меню
  // https://developers.google.com/apps-script/reference/base/ui#createmenucaption
  SpreadsheetApp.getUi()
      .createMenu('Konspekti näited')
      .addItem('Translate script', 'onEdit') 
      .addToUi();
}

Siin on ainult 1 item

Teine näide, kus mull on 5 items, kood:

function avaMenyy(){
  // lisa uus menüü Google tabelite juurde
  var programm=SpreadsheetApp.getActiveSpreadsheet();
  var menyy=[
    {name: 'Add Table andmed', functionName: 'add1'},
    {name: 'Add Table leht Lisa', functionName: 'addTable'},
    {name: 'borders', functionName: 'borders'},
    {name: 'Add Kogus ja Kokku Tablisse andmed', functionName: 'add2'},
    {name: 'Kokku suuma loetamine', functionName: 'kokkusum'},

  ]
  programm.addMenu('Script_Funktsioonid', menyy);
}

Menyy:

Google Apps Script: ajakava ülekandmine tabelist kalendrisse

Teeme tabel –>

Ja siis vaatame kuidas tehtud

kalender siin ja teeme midagi saama

function SetCalendar() {
  // Начальная строка и столбец, где начинается расписание
  const rowStart = 1; // строка, где у тебя начинаются данные
  const colStart = 1;  // колонка A (дата)
  const colsCount = 5; // A–E
  const rowsCount = 22; // до строки 43

  // Получаем таблицу и диапазон данных
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(rowStart, colStart, rowsCount, colsCount);
  var data = range.getDisplayValues();

  // Индексы столбцов (относительно начала диапазона)
  const dateCol = 0;    // A — дата
  const timeCol = 1;    // B — время
  const roomCol = 2;    // C — аудитория (будет как название)
  const subjectCol = 3; // D — предмет
  const teacherCol = 4; // E — преподаватель

  // Получаем календарь пользователя
  var calendar = CalendarApp.getDefaultCalendar();

  // Переменная для хранения последней указанной даты
  var currentDate = "";

  // Проходим по всем строкам
  for (var i = 0; i < data.length; i++) {
    var row = data[i];

    // Если в ячейке с датой есть значение — обновляем текущую дату
    if (row[dateCol]) {
      currentDate = row[dateCol];
    }

    // Получаем остальные значения
    var classDate = currentDate;
    var classPeriod = row[timeCol];
    var classRoom = row[roomCol];
    var className = row[subjectCol];
    var classTeacher = row[teacherCol];

    Logger.log("Обработка строки " + (rowStart + i));
    Logger.log("Дата: " + classDate + ", Время: " + classPeriod);

    // Если дата и время заданы, создаём событие
    if (classDate && classPeriod) {
      try {
        // Разбиваем время на начало и конец
        var [startTimeStr, endTimeStr] = classPeriod.split("-");
        var [day, month, year] = classDate.split(".");
        var [startHour, startMinute] = startTimeStr.split(":");
        var [endHour, endMinute] = endTimeStr.split(":");

        // Формируем объекты Date
        var startDate = new Date(year, month - 1, day, startHour, startMinute);
        var endDate = new Date(year, month - 1, day, endHour, endMinute);

        // Описание события
        var description = className + " (" + classRoom + ") с " + classTeacher;

        // Создаём событие
        calendar.createEvent(className, startDate, endDate, {
          description: description,
          location: classRoom
        });

        Logger.log("✅ Событие добавлено: " + className);
      } catch (error) {
        Logger.log("❌ Ошибка при добавлении события: " + error);
      }
    } else {
      Logger.log("⚠️ Пропущена строка из-за отсутствия даты или времени.");
    }

    Logger.log("===================================");
  }
}

Nüüd kontrollime kas töötab ja kuidas tema lisab andmed

logid kõik näitab ilusti

ja oma kaalendris kõik ilusti pandud