Google Lehtede lisandmoodulite ja skriptide arendamine.

Работа с триггером onEdit (реакция на изменения в таблице) 

Этот код который я выброл для изменение.

// Функция 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
    var translatedText = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'en' // на какой язык переводим
    );

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





      2 // номер столбца
    ).setValue(translatedText);
  }

}

А это код который я сам переделали и нстроили.

Добавил по мимо английского еще 3 языка. Итеперь он переводит не только с русского на английский но и на француский, Эстонсий и Китайский.

// Функция 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('Пример:..', '...') //при нажатии откроется
      .addToUi();
}





// Функция 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' // на какой язык переводим
    );


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

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

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

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

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

}

Работа с HTML Service (вывод модального окна и сайдбара в Google Spreadsheets)

Этот код который я выброл я изменение.

// Открытие модального окна
function showModalDialog() {
 
  var modalHtml = "<code>HTML</code> код - содержимое <i>модального</i> <br> окна";
 
  // https://developers.google.com/apps-script/reference/html/html-service#createhtmloutputhtml
  var htmlOutput = HtmlService.createHtmlOutput(modalHtml)
        .setWidth(600) // Ширина
        .setHeight(100); // Высота
 
  // Альтернативный вариант  - создание модального окна с содержимым из файла
  // https://developers.google.com/apps-script/reference/html/html-service#createHtmlOutputFromFile(String)
  // В этом случаем HTML код помещаем в отдельный файл (Файл - Создать - HTML файл)
  // var htmlOutput = HtmlService.createHtmlOutputFromFile(filenameModal);
 
  // https://developers.google.com/apps-script/reference/base/ui#showModalDialog(Object,String)
  SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Заголовок модального окна');
 
}
 
// Открытие сайдбара
function showSidebar() {
 
  var htmlOutput = HtmlService
    .createHtmlOutput('<p>A change of speed, a change of style...</p>')
    .setTitle('My add-on');
 
  // https://developers.google.com/apps-script/reference/base/ui#showsidebaruserinterface
  SpreadsheetApp.getUi().showSidebar(htmlOutput);
 
}

Это уже переделаная функций.

Я добавил кнопку puhasta она стирает заполненые поля. Так же изменмл язык переделал на эстонский и также добавил еще одно дополнительное поле.

// Funktsioon modaalakna avamiseks
function showModalDialog() {
    var modalHtml = "<code>HTML</code> kood - <i>modaalse</i> akna sisu";
    var htmlOutput = HtmlService.createHtmlOutput(modalHtml)
        .setWidth(600)
        .setHeight(120);
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Modaalaken');
}

// Funktsioon külgriba avamiseks
function showSidebar() {
    var sidebarHTML = '<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">';
    sidebarHTML += '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>';
    
    sidebarHTML += '<form style="padding: 20px; text-align:center;">\
        <div class="form-group">\
            <label for="name">Nimi</label>\
            <input type="text" class="form-control" id="name" name="name">\
        </div>\
        <div class="form-group">\
            <label for="school">Mis koolis sa õpid?</label>\
            <input type="text" class="form-control" id="school" name="school">\
        </div>\
        <div class="form-group">\
            <label for="grade">Mis klassis sa õpid?</label>\
            <input type="text" class="form-control" id="grade" name="grade">\
        </div>\
        <div class="form-group">\
            <label for="rowNum">Reanumber, kuhu andmed lisada</label>\
            <input type="number" class="form-control" id="rowNum" name="rowNum" min="1">\
        </div>\
        <button type="submit" class="btn btn-success">Lisa tabelisse</button>\
        <br><br>\
        <button type="button" id="clearFields" class="btn btn-warning">Puhasta väljad</button>\
        <br><br>\
        <button type="button" id="closeSidebar" class="btn btn-danger">Sulge külgriba</button>\
    </form>';
    
    sidebarHTML += "<script>\
        $(document).on('submit', 'form', function () { \
            google.script.run \
            .withSuccessHandler(function (message) { \
                alert(message);\
            })\
            .writeStrInTable({ \
                name: $('#name').val(), \
                school: $('#school').val(), \
                grade: $('#grade').val(), \
                rowNum: $('#rowNum').val() \
            });\
            return false;\
        });\
\
        $('#clearFields').on('click', function() {\
            $('#name').val('');\
            $('#school').val('');\
            $('#grade').val('');\
            $('#rowNum').val('');\
        });\
\
        $('#closeSidebar').on('click', function() {\
            google.script.host.close();\
        });\
    </script>";
    
    var htmlOutput = HtmlService.createHtmlOutput(sidebarHTML)
        .setTitle('Mis koolis õpid');
    SpreadsheetApp.getUi().showSidebar(htmlOutput);
}

// Funktsioon andmete kirjutamiseks tabelisse
function writeStrInTable(data) {
    var name = data.name;
    var school = data.school;
    var grade = data.grade;
    var rowNum = parseInt(data.rowNum);
    
    if (!name || !school || !grade || isNaN(rowNum) || rowNum < 1) {
        return "Palun täitke kõik väljad õigesti!";
    }
    
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    
    sheet.getRange("A" + rowNum).setValue(name);
    sheet.getRange("B" + rowNum).setValue(school);
    sheet.getRange("C" + rowNum).setValue(grade);
    
    return "Andmed on edukalt lisatud tabelisse!";
}