Ülesanne2: WordPress — Google Apps Scripts konspekti loomine.
//Needs to add more comments
/*
// Функция 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 english = LanguageApp.translate(
russianText, // текст
'ru', // с какого языка переводим
'en' // на какой язык переводим
);
var estonian = LanguageApp.translate(
russianText, // текст
'ru', // с какого языка переводим
'et' // на какой язык переводим
);
var spanish = LanguageApp.translate(
russianText, // текст
'ru', // с какого языка переводим
'es' // на какой язык переводим
);
// Вставляем переведённый текст во вторую колонку
sheet.getRange(
cell.getRowIndex(), // номер строки
2 // номер столбца
).setValue(english);
sheet.getRange(
cell.getRowIndex(),
3
).setValue(estonian);
sheet.getRange(
cell.getRowIndex(),
4
).setValue(spanish);
}
}
// Функция 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('Custom Menu')
.addItem('Show alert', 'showAlert')
.addItem('Show prompt', 'showPrompt')
.addToUi();
}
function showAlert() {
var ui = SpreadsheetApp.getUi();
// https://developers.google.com/apps-script/reference/base/ui#alerttitle-prompt-buttons
var result = ui.alert(
'Подтвердите действие', // Заголовок окна
'Вы уверены, что хотите продолжить?', // Сообщение
ui.ButtonSet.YES_NO // Кнопки
);
if (result == ui.Button.YES) { // Пользователь нажал на "Да"
// User clicked "Yes".
ui.alert('Подтверждение получено.');
} else { // Пользователь нажал на "Нет" или на X (закрыл окно)
ui.alert('В разрешении отказано.');
}
}
function showPrompt() {
var ui = SpreadsheetApp.getUi();
// https://developers.google.com/apps-script/reference/base/ui#prompttitle-prompt-buttons
var result = ui.prompt(
'Сообщите что-нибудь о себе!', // Заголовок
'Введите своё имя:', // Сообщение
ui.ButtonSet.OK_CANCEL // Кнопки
);
var result1 = ui.prompt(
'Сообщите что-нибудь о себе!', // Заголовок
'Введите своё день рождения:', // Сообщение
ui.ButtonSet.OK_CANCEL // Кнопки
);
var button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
var text = result.getResponseText(); // Текст, который ввёл пользователь
var textd = result1.getResponseText(); // Текст, который ввёл пользователь
if (button == ui.Button.OK) {
ui.alert('Ваше имя: ' + text + '.\nВаше день рождения ' + textd + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Вы отказались вводить своё имя.');
} else if (button == ui.Button.CLOSE) {
ui.alert('Вы закрыли окно.');
}
}
*/
// Функция 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('Custom Menu')
.addItem('Show modal dialog', 'showModalDialog') // При нажатии на этот элемент меню откроется модальное окно
.addItem('Show sidebar', 'showSidebar') // При нажатии на этот элемент меню откроется сайдбар
.addItem('Show sidebar', 'showSidebar1') // При нажатии на этот элемент меню откроется сайдбар
.addToUi();
}
// Открытие модального окна
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() {
// Подключаем Bootstrap
var sidebarHTML = '<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">';
// Подключаем jQuery
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">Имя</label>\
<input type="text" class="form-control" id="name" name="name" value="">\
</div>\
<div class="form-group">\
<label for="abrakadabra">Какая-то абракадабра</label>\
<textarea class="form-control" id="abrakadabra" name="abrakadabra" rows="3"></textarea> \
</div>\
<div class="form-group">\
<label for="strNum">Номер строки, в которую необходимо внести данные</label>\
<input type="text" class="form-control" id="strNum" name="strNum" value="">\
</div>\
<div class="form-group">\
<label for="kodu">Номер строки, в которую необходимо дата</label>\
<input type="date" class="form-control" id="kodu" name="kodu" value="">\
</div>\
<br><br><br>\
<button type="submit" class="btn btn-primary">Записать данные в таблицу</button>\
<br><br><br>\
<button type="button" id="sidebarClose" class="btn btn-danger">Закрыть сайдбар</button>\
</form>';
// Добавляем скрипты
// При сабмите формы вызываем функцию writeStrInTable() и передаём ей введённые данные
// https://developers.google.com/apps-script/guides/html/reference/run
// При клике на кнопку 'Закрыть сайдбар' закрываем его
// https://developers.google.com/apps-script/guides/html/reference/host#close()
sidebarHTML += "<script>\
$(document).on('submit', 'form', function () { \
google.script.run \
.withSuccessHandler(function (resultMsg) { \
alert(resultMsg);\
})\
.writeStrInTable(\
{ name: $('#name').val(), abrakadabra: $('#abrakadabra').val(), strNum: $('#strNum').val() , kodu: $('#kodu').val()}\
);\
return false;\
});\
\
$('#sidebarClose').on('click', function() {\
google.script.host.close();\
});\
</script>";
var htmlOutput = HtmlService
.createHtmlOutput(sidebarHTML)
.setTitle('My add-on');
// https://developers.google.com/apps-script/reference/base/ui#showsidebaruserinterface
SpreadsheetApp.getUi().showSidebar(htmlOutput);
}
function writeStrInTable(e) {
var name = e.name;
var abrakadabra = e.abrakadabra;
var strNum = parseInt(e.strNum);
var kodu = e.kodu;
// Получаем объект с активной (открытой в данный момент) таблицей
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
// Записываем полученные данные в таблицу
sheet.getRange("A" + strNum).setValue(name);
sheet.getRange("B" + strNum).setValue(abrakadabra);
sheet.getRange("D" + strNum).setValue(kodu);
return "Всё прошло успешно!";
}
// Открытие сайдбара
function showSidebar1() {
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);
}