OnEDIT with Google Script / Triggers

Первоначальный код

Изменённый код

// Функция 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);

  }

}
function onOpen(){
  SpreadsheetApp.getUi()
      .createMenu('Konspekti näited')
      .addItem('Transale', 'onEdit') // При нажатии на этот элемент меню откроется модальное окно
      .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
    var translatedText = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'en' // на какой язык переводим
    );
        
    var translatedText2 = LanguageApp.translate(
      russianText, // текст
      'ru', // с какого языка переводим
      'fr' // на какой язык переводим
    );

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

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

Этот скрипт позволяет автоматически переводить текст, введённый в первый столбец листа “Перевод текста”, и записывать переводы в соседние колонки. Переводит его на три языка с помощью LanguageApp.translate():

  • Английский (en)
  • Французский (fr)
  • Украинский (uk)

Когда пользователь открывает Google Таблицу, выполняется функция onEdit. Она:

  • Добавляет новое пользовательское меню “Konspekti näited” в интерфейсе Google Таблиц.
  • В это меню добавляется пункт “Transale”, который связан с функцией onEdit.

Parsing заголовков сайтов

function parser() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName('Parser');
  let values = sheet.getDataRange().getValues();
 
  let insertError = function(msg, numRow) {
    sheet.getRange(numRow, 2).setValue('ОШИБКА! ' + msg).setBackground('red');
  }
 
  let rowNumStart = 1; // Номер строки, с которой необходимо начать Parsing
 
  for (let i = rowNumStart; i < values.length; i++) {
 
    let url = values[i][0];
 
    try {
 
      let 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 {
        let headers = response.getHeaders();
        let charset = headers['Content-Type'].match(/charset=(.*)$/)[1].replace(/[";]+/gi, ''); // Кодировка страницы
      } catch (e) {
        let contentForCharset = response.getContentText();
        let charsetMatch = contentForCharset.match(/charset=(.*?)"/);
        let 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);
}
 
} else {
insertError('Код ответа сервера != 200.', i+1);
}
 
}