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!";
}