Google Apps Script

Матеріал з Wiki.Zina
Версія від 07:41, 6 вересня 2022, створена >Zina (→Вывод значения переменной в лог)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Наши скрипты

[ред. | ред. код]

Горячие клавиши редактора Google Apps Script

[ред. | ред. код]

https://www.benlcollins.com/apps-script/google-apps-script-ide/

Auto-complete Google stuff Ctrl+Space
Auto-complete your own variables Alt+/
Run selected function Ctrl+R
View log of run Ctrl+Enter
(With auto-indent on)
indent all code correctly
Tab (works on selected text)
Comment/uncomment Ctrl+/

Отладка скрипта

[ред. | ред. код]

Вывод значения переменной в лог

[ред. | ред. код]
  Logger.log("variableName: " + variableName);

Затем нажать Выполнить.

Остановка скрипта в произвольном месте

[ред. | ред. код]
return;

Наши сниппеты

[ред. | ред. код]

Показать в Logs номер активной строки в таблице

[ред. | ред. код]
function getActiveRowInfo() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeRow = ss.getActiveCell().getRow();
  Logger.log("activeRow: " + activeRow);
}

Дата на украинском и русском

[ред. | ред. код]
function testMoment() {
  eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js').getContentText());
  eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/uk.js').getContentText());
  // eval(UrlFetchApp.fetch('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/locale/ru.js').getContentText());
  var date = moment().format('LL');
  var momentLocale = moment.locale();
  Logger.log(date);
  Logger.log(momentLocale);
}

Доступные в CDN библиотеки: https://cdnjs.com/libraries/moment.js/

Очистка всех highlight в тексте

[ред. | ред. код]
function clearHighLight() {
  var bgcolor = '#ffffff'; //white
  var doc = DocumentApp.getActiveDocument();
  var rangeBuilder = doc.newRange();
  var body = doc.getBody();
  var numCh = body.getNumChildren();
  for (var i=0; i<numCh; i++) {
    var child = body.getChild(i); //collect all range elements
    var all = rangeBuilder.addElement(child);
  }
  doc.setSelection(all);
  var selectedElements = all.getRangeElements();
  for (var i=0; i<selectedElements.length; i++) {
    var selElem = selectedElements[i];
    var el = selElem.getElement();
    var isPartial = selElem.isPartial();
    if (isPartial) {
      var selStart = selElem.getStartOffset();
      var selEnd = selElem.getEndOffsetInclusive();
      el.asText().setBackgroundColor(selStart, selEnd, bgcolor)      
    } else {
      var selStart = selElem.getStartOffset();
      var selEnd = selElem.getEndOffsetInclusive();
      el.asText().setBackgroundColor(bgcolor);
    }
  }
  var rg = doc.newRange();
  rg.addElement(body.getChild(0)); //child zero normally has nothing in it
  doc.setSelection(rg.build());
}

Примеры

[ред. | ред. код]
function getDocAsHtml(docId){ 
  var url = 'https://docs.google.com/feeds/download/documents/Export?exportFormat=html&format=html&id=';
  return UrlFetchApp.fetch(url+docId).getContentText();
}

Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы:

var ss = SpreadsheetApp.getActiveSpreadsheet();    
var sheet = ss.getSheets()[0];
sheet.getRange("A1").setValue("Содержимое ячейки");

А этот код создает копию текстового документа и кладет его в определенное место:

var source = DocsList.getFileById("SOURCE_ID");
var newFile = source.makeCopy("новое имя файла");
var targetFolder = DocsList.getFolderById("ID папки, в которой будет размещен свежесозданный файл");
newFile.addToFolder(targetFolder);

А вот так можно провести замену строк в текстовом документе:

var doc = DocumentApp.openById("ID редактируемого документа");
doc.editAsText().replaceText("старый текст", "новый текст");
Logger.log(doc.getText())

Следующий пример кода подсвечивает определенные слова в тексте:

var doc = DocumentApp.openById('id документа');
var textToHighlight = 'текст для подсветки';
var highlightStyle = {};
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
var paras = doc.getParagraphs();
var textLocation = {}; 
for (i=0; i<paras.length; ++i)
{
    textLocation = paras[i].findText(textToHighlight);
    if (textLocation != null && textLocation.getStartOffset() != -1)
    {
        textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);
    }
}

Работа с Google Translate:

var word = LanguageApp.translate('кукушка', 'ru', 'es');
Logger.log(word);
// Скрипт выведет в консоль "cuco" — кукушка по-испански

Google Contacts: Приведенный ниже код копирует все контакты из группы «Редакция» в лист Google Spread Sheet:

var group = ContactsApp.getContactGroup("Редакция");
var contacts = group.getContacts();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Контакты редакции");
for (var i in contacts) {
 // Сохраняем данные о контактах в ячейки: имя, фамилия, номер телефона
 sheet.getRange(i, 1, 1, 1).setValue(contacts[i].getGivenName());
 sheet.getRange(i, 2, 1, 1).setValue(contacts[i].getFamilyName()); 
 sheet.getRange(i, 3, 1, 1).setValue(contacts[i].getPhones());     
// И еще есть метод для получения номера пейджера (!) контакта
 sheet.getRange(i, 4, 1, 1).setValue(contacts[i].getPager());     
}

Работа с календарем: Создавать события в календаре тоже можно автоматически (и так же, как в случае с рассылкой, формировать информацию о них из строк таблицы). Код для создания события:

var timeZone = CalendarApp.getTimeZone();
var description = Utilities.formatString( '%s from %s to %s', "заголовок события", dateString_( "дата начала события", "часовой пояс" ), dateString_("дата конца события", "часовой пояс" ));
CalendarApp.createEventFromDescription(description);

Ссылки

[ред. | ред. код]

Склонение ФИО

[ред. | ред. код]

Форматирование даты на украинском

[ред. | ред. код]