Google Apps Script — это язык для автоматизации работы с онлайн-приложениями, появившийся в 2009 году. Его основа — классический JavaScript, обогащенный расширениями для работы с сервисами Google. После прочтения этой статьи ты овладеешь основами использования этого языка, выучишь пару приемов манипуляции с почтой и документами, а также получишь представление о необозримых возможностях Google Apps Script.

 

Основы использования

Начать писать Google Apps скрипты очень просто. Первым делом надо открыть редактор скриптов в любом приложении, взаимодействие с которым будем автоматизировать. В Google Docs он находится в меню «Инструменты -> Редактор скриптов». Далее надо выбрать проект, внутри которого будет располагаться скрипт (см. рис. 1). В открывшемся окне пишем код:

function FirstExampleFunc() 
{
    Browser.msgBox("Это таки JS! ");
}
Рис. 1. Стартовое окно редактора скриптов
Рис. 1. Стартовое окно редактора скриптов

Декларированную функцию можно запускать из «Инструменты -> Управление скриптами» или сделать для нее отдельную кнопку. Для этого надо прописать еще одну функцию:

function menu() 
{
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var entries = [ {name: "Моя единственная функция", functionName: "FirstExampleFunc"},
     ss.addMenu("Мои функции", entries);
}

Теперь в нашем меню есть пункт под названием ExampleFunc, при клике на который открывается однострочное подменю «Моя единственная функция».

Декларированные функции можно использовать в формулах, которые вводятся внутрь ячеек электронных таблиц (см. рис. 3). Теперь перейдем к более практически полезным примерам.

Рис. 2. Редактор кода, заполненный автогенерируемым сырьевым материалом для работы с электронной таблицей
Рис. 2. Редактор кода, заполненный автогенерируемым сырьевым материалом для работы с электронной таблицей
Рис. 3. Вызов пользовательской функции с аргументом
Рис. 3. Вызов пользовательской функции с аргументом

 

WARNING

Перед запуском скрипта не забудь сделать резервную копию важной информации. Действия, выполненные GS, нельзя отменить нажатием <Ctrl + Z>.

 

Работа с Google Docs

Когда встает задача автоматизации работы с офисными документами, первым делом на ум приходит VBA, одно упоминание которого оказывает на многих тотальное антиэкстатическое воздействие, вызывая болезненные воспоминания из школьного и университетского прошлого. Google Script однозначно удобнее и доступнее для понимания. Особенно для веб-разработчиков, ведь это же родной, привычный и любимый JS! Разберем пару примеров скриптов для Google Docs. Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы:

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);
    }
}
Рис. 4 Вот здесь можно узнать ID документа
Рис. 4 Вот здесь можно узнать ID документа

Подробности:

 

INFO

Если пишешь скрипт, включающий в себя функции поиска/замены текста, помни о том, что GS поддерживает регулярные выражения.

 

Работа с почтой

Письмо отправляется одной короткой строкой: MailApp.sendEmail(«irairache@gmail.com», «тема письма», «текст письма») Если добавить к ней еще немного кода, то можно организовать рассылку по списку адресов из электронной таблицы (исходник ищи в приложении):

 var sheet = SpreadsheetApp.getActiveSheet();
 var numRows = sheet.getLastRow(); 
 var dataRange = sheet.getRange(1, 1, numRows, 2)
 var data = dataRange.getValues();
 for (var i = 0; i < data.length; ++i) 
 {
     var row = data[i];
     var name = row[0]; 
     var email = row[1];    
     var subject = "Тема письма";
     var message = "Здравствуйте, " + name + "!";   
     MailApp.sendEmail(email, subject, message);
}

Помимо рассылок, с помощью GS можно производить автоматизированную обработку содержимого почтового ящика. Пример — удаление всех писем от адресата, на которого ты обиделся:

var threads = GmailApp.search('enemy@example.com');
for(var i = 0; i < threads.length; i++)
{
      var messages = threads[i].getMessages();
      for(var j = 0; j < messages.length; j++)
      {
           messages[j].moveToTrash();
      }
}

Больше информации ищи в Google Apps Script References для Gmail.

 

WARNING

Имей в виду, что Gmail не только защищает от входящего спама, но и ограничивает рассылку исходящего. Больше 500 писем за сутки с помощью Google Apps Script не выйдет.

 

Работа с Google Translate

С помощью Google Apps Script можно переводить текстовые строки с одного языка на другой. Пример:

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

Коды для языков можно посмотреть в адресной строке сервиса Google Translate.

Подробности: Google Apps Script References для Google Language.

 

INFO

Если выделить код и нажать <Shift + Tab>, то магическим образом расставятся все отступы для условий, циклов, объявленных функций и всех других мест, где им положено быть.

 

Работа с Google Drive

Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя:

var files = DriveApp.getFiles();
while (files.hasNext()) {
  var file = files.next();
  Logger.log(file.getName());
}

К файлам можно применять несколько десятков различных методов. Вот некоторые из них:

  • addEditor(«email пользователя») — наделяет пользователя правами на редактирование файла;
  • getOwner() — узнать владельца файла;
  • makeCopy(«имя», «путь») — создать копию файла;
  • getLastUpdated() — возвращает пользователя, который внес последнее изменение.
 

Работа с 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());     
  }

Подробности: Google Apps Script References для Google Contacts.

 

Работа с Google Tasks

С помощью Google Apps Scripts можно работать с сервисом Google Task — создавать новые задачи и парсить уже имеющиеся.

Этот код создает новое дело в списке:

// Найти ID тасклиста можно внутри адресной строки в сервисе Google Task
    var taskListId="id тасклиста,";
     var newTask = {
            title: 'Выбросить финиковые косточки',
            notes: 'Не забыть косточки под кроватью'
         };
  newTask = Tasks.Tasks.insert(newTask , taskListId);
  Logger.log ("Задача с ID "%s" создана", newTask.id);

А таким образом можно вывести список нумерованных задач в консоль:

// Кладем все задачи списка в массив
   var tasks = Tasks.Tasks.list(taskListId);    
    for (var i = 0; i < tasks.items.length; i++)
     {
         var task = tasks.items[i];
         Logger.log(i. ". ",%s, task.title, task.id);
       }

Задачи можно перемещать из одного списка в другой с помощью метода move, дополнять с помощью метода update и удалять с помощью метода delete.

Всего есть несколько десятков методов для работы с задачами. Полный их список доступен вGoogle Apps Script References для Google Tasks.

 

Работа с календарем

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

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

Google Script References для Calendar

 

Формы обмена скриптами

Есть два основных способа поделиться своим скриптом с другим человеком (без учета непосредственного обмена исходным кодом) — ссылка и гаджет. В первом случае все просто: пользователь получает ссылку на программу, переходит по ней, и скрипт немедленно начинает выполняться (при условии, что человек авторизирован в своем Google-аккаунте).

Гаджет — это приложение-контейнер, которое размещается на веб-странице и исполняет определенные функции. Примеры: мини-блок в углу страницы с прогнозом погоды или календарем. Чтобы поместить Google Script внутрь гаджета, необходимо в меню редактора скриптов выбрать пункт «Publish -> Deploy as web app».

Больше информации о Google Gadgets

 

INFO

А если нажать <Ctrl + Space>, то включится режим автозавершения, то есть редактор будет дописывать код за тебя.

 

События

Можно настроить скрипт так, чтобы он выполнялся после определенного события. К примеру, после открытия/редактирования электронной таблицы или отправки данных формы. Подробности о работе с Events

 

Работа с базами данных

Для этого существует сервис для работы с базами данных Google Cloud SQL. По сути — классический MySQL в облаке. Может взаимодействовать с Google Apps Script по стандарту Java Database Connectivity. Вот пример кода, который производит чтение записей из таблицы:

var conn = Jdbc.getConnection(dbUrl, user, userPwd);
var start = new Date();
var stmt = conn.createStatement();
stmt.setMaxRows(1000);
var results = stmt.executeQuery('SELECT * FROM entries');
var numCols = results.getMetaData().getColumnCount();
while (results.next()) {
var rowString = '';
for (var col = 0; col < numCols; col++)
{
    rowString += results.getString(col + 1) + '\t';
}
    Logger.log(rowString)
}
results.close();
stmt.close();

Стоимость использования сервиса — 88 долларов в год за 10 Гб свободного места. С другими базами данных Google Apps Script, к сожалению, работать не может. Если ты запланировал написать скрипт, который должен взаимодействовать с данными, не стоит сразу расстраиваться или истощать свой бюджет пожертвованиями на закупку квадроциклов для жителей Кремниевой долины. Есть два способа выкрутиться из этой ситуации:

  • первый — хранить данные в виде таблиц на Google Drive;
  • второй — разместить базу на стороннем сервере, на нем же разместить {php}{hode.js}{python}{и т. д.} скрипт, который будет выполнять к ней запрос и возвращать ответ в формате JSON или XML, а его, в свою очередь, подвергать парсингу внутри GS. Подробности о Google Cloud SQL
 

Приложения, с которыми может взаимодействовать Google Apps Script

Я думаю, что далеко не каждый из наших читателей успел опробовать все онлайн-сервисы Google. В целях расширения кругозора и стимуляции творческого воображения приведем краткий обзор возможностей приложений, работу которых можно автоматизировать с помощью Google Apps Script.

  • Google Mail — почтовый клиент. Наиболее интересна в нем возможность отправлять письма людям, адреса которых неизвестны. Для этого надо включить настройку «Отправлять письма пользователям Google+» и ввести имя и фамилию получателя в поле «Кому».
  • Google Calendar — органайзер. Самое удобное в нем — возможность отправки SMS-уведомлений о событиях на номера российских операторов.
  • Google Contacts — приложение для хранения контактов. Самый цимес его в том, что если ты случайно синхронизируешь свой список контактов с новым смартфоном и все имена сотрутся, то сможешь попросить у Google резервную копию предыдущей версии, которая навечно сохранена в его архивах.
  • Google Drive — облачное хранилище данных. 15 Гб, на которых также размещаются данные всех других приложений, доступны бесплатно.
  • Google Maps — онлайн-карты. Жителям СНГ повезло, у них есть альтернативный инструмент для построения маршрутов и просмотра панорам улиц — Яндекс.Карты. Для жителей большинства других территорий альтернатив нет. Google Maps — единственная всемирная картографическая система, позволяющая искать населенные пункты, вводя названия на языке государства, в котором они находятся. Допустим, не Kotlas, а Котлас, не Vagharshapat, а Վաղարշապատ.
  • Google Docs — онлайн-редактор офисных документов. Во время написания статьи этот сервис совершил мега-прорыв — появилась возможность редактировать документы, созданные в Microsoft Office. Это произошло после интеграции сервиса с функционалом приложения Quickoffice. Ради интереса попробовала отредактировать в Google Docs пояснительную записку к диплому (как пример документа с простейшим форматированием). Преобразование docx в гугл-формат пришлось ждать около минуты, и внешний вид текста явно отличался от оригинала.
  • Google Forms позволяет создавать формы для сбора различных данных (онлайн-опрос, страницу регистрации на событие, обратную связь для сайта и прочее), которые можно привязать к таблицам в различных форматах (HTML, CVS, TXT, PDF, RSS, XLS, ODF). Собранные данные хранятся на Google Drive.
  • Google Sites — бесплатный хостинг (100 Мб) с предельно ограниченным функционалом и собственной wiki-разметкой. Полнофункциональный HTML, а также CSS и JS недоступны.
 

SRC

По старой доброй традиции, которой уже почти три месяца, мы выложили несколько исходничков на GitHub:

  • autodeletemail.gs — удаляет письма, с момента получения которых прошло n-ное количество дней;
  • snoozeemails.gs — скрипт для повторной отправки самому себе прочитанных писем через определенный промежуток времени;
  • sendsmsaboutemails.gs — настраивает отправку SMS в случае получения писем, соответствующих определенным критериям. Перед его использованием надо указать свой номер телефона Google Calendar;
  • savemailtopdfindrive.gs — сохраняет содержимое письма в файлах на Google Drive;
  • fromcalendartospreadsheet.gs — записывает информацию из календаря в электронную таблицу;
  • sendmailsfromspreadsheet.gs — рассылает письма по списку адресов из электронной таблицы;
  • createdocsfromspread.gs — генерирует текстовые документы из данных электронной таблицы.
 

Advanced Google Services

У Google есть множество API для разработчиков, которые можно внедрять в программы, написанные на Google Apps Script. Для этого надо подключить в редакторе скриптов эту возможность (в меню Resources, далее Advanced Google services). После этого можно будет задействовать возможности следующих сервисов:

  • Google AdSense — сервис для работы с контекстными рекламными объявлениями.
  • Google Analytics — осуществляет анализ посещаемости веб-сайтов и мобильных приложений.
  • Google BigQuery — позволяет производить различные манипуляции (запись, чтение, перемещение и так далее) над большими объемами данных, а также анализировать их.
  • Google Fusion Tables — экспериментальный сервис, позволяющий размещать данные в облаке, отправлять к ним запросы и получать результаты выполнения в формате JSON и CSV. Из которых, в свою очередь, можно формировать электронные таблицы, карты, графики и другие виды визуального представления данных.
  • Google Domains — сервис для регистрации доменов (новый проект, открылся в конце июня 2014 года).
  • Google Mirror — API для взаимодействия с Google Glass.
  • Google Prediction — сервис для анализа данных (основанный на технологии машинного обучения). Позволяет внедрять в приложения следующие фичи: классификатор документов и писем, расчет churn rate (показатель оттока пользователей), детектор спама, оптимизатор маршрутизации сообщений и множество других интересных вещей, достойных отдельной статьи.
  • Google Tasks — встроенный в Gmail сервис для составления списков дел.
  • Google URL Shortener — любимый нашим журналом сервис для сокращения длинных ссылок.
  • YouTube Analytics — сервис для анализа статистики просмотров видео на YotTube. Примечателен возможностью узнать демографические и географические характеристики пользователей, смотрящих определенный видеоролик. Ведь интересно выложить очередную копию клипа на песню «До свидания, кореша» и проанализировать, какого пола, возраста и места жительства ее слушатели. Подробности

 

Ира Чернова

Выпускающий редактор журнала «Хакер»

6 комментариев

  1. 11.01.2015 at 13:57

    Автор ничего не имею против Apps Script, даже перепишу свою мини спамилку под gmail на нем. Но VBA оскорблять не надо, если вам конкретно он не нравится, не надо его с говном смешивать, это очень толковый инструмент и работали с ним, когда гугл еще пешком под стол ходил!

  2. 19.02.2015 at 09:38

    Добрый день! Хочу уточнить по поводу работы с БД MySQL. У меня имеются 2а ПК на них стоят MySQL БД и они соединены по локальной сети. Выше вы писали, что «Может взаимодействовать с Google Apps Script по стандарту Java Database Connectivity. Вот пример кода, который производит чтение записей из таблицы… Стоимость использования сервиса — 88 долларов в год за 10 Гб свободного места. С другими базами данных Google Apps Script, к сожалению, работать НЕ может» отсюда вопрос: я написал скрипт практически такой же как в примере(кроме имени пользователя и т.д.) и этот скрипт спокойно подключился к БД MySQL на втором компе и взял с него данные. Еще на этих компах стоят JDBC коннекторы которые шли с MySQL(взял на офф сайте). Просьба объяснить по поводу платности, ведь получается что облаком то я не пользовался?

  3. 14.03.2015 at 05:35

    Ссылка на русскоязычное сообщество не работает…

  4. xxx22006

    05.06.2016 at 17:37

    В экселе с помощью VBA прописан макрос — для автоматического проставления даты в ячейке, когда значение ячейки слева измениться.
    Как Google Docs заставить понимать этот макрос в документе экселя?
    Или как в Google Docs написать что то похожое?

    • DamirMakhmudov

      26.07.2017 at 01:33

      VBA восприниматься не будет. Скрипт придется переписать на Google Apps Script. Внутри есть триггеры, например, на изменение в таблице. Могу помочь со скриптом samrukov@gmail.com

  5. make-chip

    09.05.2018 at 15:22

    Хороший русскоязычный учебник по gas g-apps-script.com

Оставить мнение

Check Also

Прятки с Windows 10. Тестируем программы для отключения слежки и повышения приватности

С выхода Windows 10 прошло уже три с лишним года, а проблема слива пользовательских данных…