Triggeri toiming onEdit
Enne:
// Функция 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 button = result.getSelectedButton(); // Кнопка, на которую нажал пользователь
var text = result.getResponseText(); // Текст, который ввёл пользователь
if (button == ui.Button.OK) {
ui.alert('Ваше имя: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Вы отказались вводить своё имя.');
} else if (button == ui.Button.CLOSE) {
ui.alert('Вы закрыли окно.');
}
}
Tulemus:

Pärast:
// Функция 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', // с какого языка переводим
'et' // на какой язык переводим
);
let translatedText3 = LanguageApp.translate(
russianText, // текст
'ru', // с какого языка переводим
'fr' // на какой язык переводим
);
// Вставляем переведённый текст во вторую колонку
sheet.getRange(
cell.getRowIndex(), // номер строки
2 // номер столбца
).setValue(translatedText);
sheet.getRange(
cell.getRowIndex(), // номер строки
3 // номер столбца
).setValue(translatedText2);
sheet.getRange(
cell.getRowIndex(), // номер строки
4 // номер столбца
).setValue(translatedText3);
}
Tulemus:

Enne:
function parser() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('list');
var values = sheet.getDataRange().getValues();
var insertError = function(msg, numRow) {
sheet.getRange(numRow, 2).setValue('ОШИБКА! ' + msg).setBackground('red');
}
var rowNumStart = 1; // Номер строки, с которой необходимо начать парсинг
for (var i = rowNumStart; i < values.length; i++) {
var url = values[i][0];
try {
var response = UrlFetchApp.fetch(url, {
'muteHttpExceptions': true,
'validateHttpsCertificates': false,
'followRedirects': true,
}); // Загружаем страницу по указанному url
} catch(e) {
insertError(e, i+1);
continue;
}
// https://developers.google.com/apps-script/reference/url-fetch/http-response
var responseCode = response.getResponseCode(); // Код ответа сервера
if (responseCode === 200) {
try {
var headers = response.getHeaders();
var charset = headers['Content-Type'].match(/charset=(.*)$/)[1].replace(/[";]+/gi, ''); // Кодировка страницы
} catch (e) {
var contentForCharset = response.getContentText();
var charsetMatch = contentForCharset.match(/charset=(.*?)"/);
var charset = (charsetMatch !== null) ? charsetMatch[1] : "UTF-8";
}
var content = response.getContentText(charset); // Получаем html код страницы
// Получаем название поста
var titleMatch = content.match(/<title[^>]*>\s*([\s\S]*?)\s*</);
if (titleMatch !== null) {
var title = titleMatch[1];
// Вставляем название в таблицу
sheet.getRange(i+1,2).setValue(title);
} else {
insertError('Не удалось распарсить title.', i+1);
}
} else {
insertError('Код ответа сервера != 200.', i+1);
}
}
}
Tulemus:

Pärast:
function parser() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('list');
let values = sheet.getDataRange().getValues();
let insertError = function(msg, numRow, col) {
sheet.getRange(numRow, col).setValue('ОШИБКА! ' + msg).setBackground('red');
}
let rowNumStart = 1; // Номер строки, с которой необходимо начать парсинг
for (let i = rowNumStart; i < values.length; i++) {
let url = values[i][0];
try {
var response = UrlFetchApp.fetch(url, {
'muteHttpExceptions': true,
'validateHttpsCertificates': false,
'followRedirects': true,
}); // Загружаем страницу по указанному url
} catch(e) {
insertError(e, i+1);
continue;
}
// https://developers.google.com/apps-script/reference/url-fetch/http-response
let responseCode = response.getResponseCode(); // Код ответа сервера
if (responseCode === 200) {
try {
let headers = response.getHeaders();
var charset = headers['Content-Type'].match(/charset=(.*)$/)[1].replace(/[";]+/gi, ''); // Кодировка страницы
} catch (e) {
let contentForCharset = response.getContentText();
let charsetMatch = contentForCharset.match(/charset=(.*?)"/);
var charset = (charsetMatch !== null) ? charsetMatch[1] : "UTF-8";
}
let content = response.getContentText(charset); // Получаем html код страницы
// Получаем название поста
let titleMatch = content.match(/<title[^>]*>\s*([\s\S]*?)\s*</);
if (titleMatch !== null) {
let title = titleMatch[1];
// Вставляем название в таблицу
sheet.getRange(i+1,2).setValue(title);
} else {
insertError('Не удалось распарсить title.', i+1, 2);
}
// Вставляем контент в третью колонку
let sisuMatch = content.match(/<main[^>]*>([\s\S]*?)<\/main>/i)
if (sisuMatch !==null) {
let sisu = sisuMatch[1].replace(/<[^>]*>/g, '') // Убираем HTML-теги
sheet.getRange(i+1, 3).setValue(sisu); // Записываем в таблицу
} else {
insertError('Не удалось распарсить sisu.', i+1, 3);
}
} else {
insertError('Код ответа сервера != 200.', i+1);
}
}
}
Tulemus:
