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: