Google Apps Script — это язык для автоматизации работы с онлайн-приложениями, появившийся в 2009 году. Его основа — классический JavaScript, обогащенный расширениями для работы с сервисами Google. После прочтения этой статьи ты овладеешь основами использования этого языка, выучишь пару приемов манипуляции с почтой и документами, а также получишь представление о необозримых возможностях Google Apps Script.
Начать писать Google Apps скрипты очень просто. Первым делом надо открыть редактор скриптов в любом приложении, взаимодействие с которым будем автоматизировать. В Google Docs он находится в меню «Инструменты -> Редактор скриптов». Далее надо выбрать проект, внутри которого будет располагаться скрипт (см. рис. 1). В открывшемся окне пишем код:
Function FirstExampleFunc() { Browser.msgBox("Это таки JS! "); }
Декларированную функцию можно запускать из «Инструменты -> Управление скриптами» или сделать для нее отдельную кнопку. Для этого надо прописать еще одну функцию:
Function menu() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var entries = [ {name: "Моя единственная функция", functionName: "FirstExampleFunc"}, ss.addMenu("Мои функции", entries); }
Теперь в нашем меню есть пункт под названием ExampleFunc, при клике на который открывается однострочное подменю «Моя единственная функция».
Декларированные функции можно использовать в формулах, которые вводятся внутрь ячеек электронных таблиц (см. рис. 3). Теперь перейдем к более практически полезным примерам.
Перед запуском скрипта не забудь сделать резервную копию важной информации. Действия, выполненные GS, нельзя отменить нажатием
Когда встает задача автоматизации работы с офисными документами, первым делом на ум приходит VBA, одно упоминание которого оказывает на многих тотальное антиэкстатическое воздействие, вызывая болезненные воспоминания из школьного и университетского прошлого. Google Script однозначно удобнее и доступнее для понимания. Особенно для веб-разработчиков, ведь это же родной, привычный и любимый JS! Разберем пару примеров скриптов для Google Docs. Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы:
Var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets(); 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 = "#FF0000";
var paras = doc.getParagraphs();
var textLocation = {};
for (i=0; i Подробности: Если пишешь скрипт, включающий в себя функции поиска/замены текста, помни о том, что GS поддерживает регулярные выражения. Письмо отправляется одной короткой строкой: MailApp.sendEmail(«[email protected]», «тема письма», «текст письма») Если добавить к ней еще немного кода, то можно организовать рассылку по списку адресов из электронной таблицы (исходник ищи в приложении): 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;
var email = row;
var subject = "Тема письма";
var message = "Здравствуйте, " + name + "!";
MailApp.sendEmail(email, subject, message);
}
Помимо рассылок, с помощью GS можно производить автоматизированную обработку содержимого почтового ящика. Пример — удаление всех писем от адресата, на которого ты обиделся: Var threads = GmailApp.search("[email protected]");
for(var i = 0; i < threads.length; i++)
{
var messages = threads[i].getMessages();
for(var j = 0; j < messages.length; j++)
{
messages[j].moveToTrash();
}
}
Имей в виду, что Gmail не только защищает от входящего спама, но и ограничивает рассылку исходящего. Больше 500 писем за сутки с помощью Google Apps Script не выйдет. С помощью Google Apps Script можно переводить текстовые строки с одного языка на другой. Пример: Var word = LanguageApp.translate("кукушка", "ru", "es");
Logger.log(word);
// Скрипт выведет в консоль "cuco" — кукушка по-испански
Коды для языков можно посмотреть в адресной строке сервиса Google Translate. Если выделить код и нажать Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя: Var files = DriveApp.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(file.getName());
}
К файлам можно применять несколько десятков различных методов. Вот некоторые из них: Адресная книга также может быть подвергнута автоматизированной обработке. Приведенный ниже код копирует все контакты из группы «Редакция» в лист 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 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. Создавать события в календаре тоже можно автоматически (и так же, как в случае с рассылкой, формировать информацию о них из строк таблицы). Код для создания события: Var timeZone = CalendarApp.getTimeZone();
var description = Utilities.formatString("%s from %s to %s", "заголовок события", dateString_("дата начала события", "часовой пояс"), dateString_("дата конца события", "часовой пояс"));
CalendarApp.createEventFromDescription(description);
Гаджет — это приложение-контейнер, которое размещается на веб-странице и исполняет определенные функции. Примеры: мини-блок в углу страницы с прогнозом погоды или календарем. Чтобы поместить Google Script внутрь гаджета, необходимо в меню редактора скриптов выбрать пункт «Publish -> Deploy as web app». А если нажать Можно настроить скрипт так, чтобы он выполнялся после определенного события. К примеру, после открытия/редактирования электронной таблицы или отправки данных формы. Для этого существует сервис для работы с базами данных 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. В целях расширения кругозора и стимуляции творческого воображения приведем краткий обзор возможностей приложений, работу которых можно автоматизировать с помощью Google Apps Script. По старой доброй традиции, которой уже почти три месяца, мы выложили несколько исходничков на GitHub: У Google есть множество API для разработчиков, которые можно внедрять в программы, написанные на Google Apps Script. Для этого надо подключить в редакторе скриптов эту возможность (в меню Resources, далее Advanced Google services). После этого можно будет задействовать возможности следующих сервисов: В далёких 90-х я начинал осваивать программирование, и первые мои "коммерческие" приложения были написаны на VBA под MS Excel. До сих пор помню как удобно было работать, имея готовый интерфейс, функции для манипуляции данными и адресуемые ячейки... Этот, в принципе, нормальный путь для обучения программированию, сейчас имеет несколько недостатков. Во-первых, нехорошо с первых приложений связывать себя с поприетарной средой разработки и исполнения кода, а во-вторых, кому сейчас нужен Visual basic?. Вот JavaScript и GoogleDoc - другое дело. Да и возможностей, учитывая "web-интерфейсность" среды исполнения и открытые API, существенно больше. Надеюсь, у вас уже есть Google аккаунт. Входим в свой Google Drive, создаём новы документ Google Spreadsheet. Выбираем в меню нашего нового документа "Инструменты"->"Редактор скриптов" и получаем окно, где можно собственно приступить к программированию. Пишем код
Function
myFunction()
{
var
ss =
SpreadsheetApp.getActiveSpreadsheet
()
;
var
sheet =
ss.getSheets
()
[
0
]
;
var
first =
Browser.inputBox
("First value"
)
;
sheet.getRange
("A1"
)
.setValue
("First value:"
)
;
sheet.getRange
("B1"
)
.setValue
(first)
;
var
next =
Browser.inputBox
("Next value"
)
;
sheet.getRange
("A2"
)
.setValue
("Next value:"
)
;
sheet.getRange
("B2"
)
.setValue
(next)
;
var
result =
sheet.getRange
("B1"
)
.getValue
()
+
sheet.getRange
("B2"
)
.getValue
()
;
sheet.getRange
("A3"
)
.setValue
("Result:"
)
;
sheet.getRange
("B3"
)
.setValue
(result)
;
Browser.msgBox
("Summ is: "
+
result)
;
}
Вызываем нашу функцию
Есть несколько способов вызвать наш скрипт из Spreadshett-а. Вариант с вызовом через меню "Инструменты"->"Управление скриптами" мы не рассматриваем как неюзабельный. Ss.addMenu
("Test"
,
[
{
name
:
"Test"
,
functionName:
"myFunction"
}
]
)
;
Google Apps Script - это язык для автоматизации работы с онлайн-приложениями, появившийся в 2009 году. Его основа - классический JavaScript, обогащенный расширениями для работы с сервисами Google. После прочтения этой статьи ты овладеешь основами использования этого языка, выучишь пару приемов манипуляции с почтой и документами, а также получишь представление о необозримых возможностях Google Apps Script. Начать писать Google Apps скрипты очень просто. Первым делом надо открыть редактор скриптов в любом приложении, взаимодействие с которым будем автоматизировать. В Google Docs он находится в меню «Инструменты -> Редактор скриптов». Далее надо выбрать проект, внутри которого будет располагаться скрипт (см. рис. 1). В открывшемся окне пишем код: Function FirstExampleFunc()
{
Browser.msgBox("Это таки JS! ");
}
Декларированную функцию можно запускать из «Инструменты -> Управление скриптами» или сделать для нее отдельную кнопку. Для этого надо прописать еще одну функцию: Function menu()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var entries = [ {name: "Моя единственная функция", functionName: "FirstExampleFunc"},
ss.addMenu("Мои функции", entries);
}
Теперь в нашем меню есть пункт под названием ExampleFunc, при клике на который открывается однострочное подменю «Моя единственная функция». Декларированные функции можно использовать в формулах, которые вводятся внутрь ячеек электронных таблиц (см. рис. 3). Теперь перейдем к более практически полезным примерам. Перед запуском скрипта не забудь сделать резервную копию важной информации. Действия, выполненные GS, нельзя отменить нажатием Когда встает задача автоматизации работы с офисными документами, первым делом на ум приходит VBA, одно упоминание которого оказывает на многих тотальное антиэкстатическое воздействие, вызывая болезненные воспоминания из школьного и университетского прошлого. Google Script однозначно удобнее и доступнее для понимания. Особенно для веб-разработчиков, ведь это же родной, привычный и любимый JS! Разберем пару примеров скриптов для Google Docs. Приведенный код заполняет левую верхнюю ячейку первого листа активной таблицы: Var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets();
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 = "#FF0000";
var paras = doc.getParagraphs();
var textLocation = {};
for (i=0; i Имей в виду, что Gmail не только защищает от входящего спама, но и ограничивает рассылку исходящего. Больше 500 писем за сутки с помощью Google Apps Script не выйдет. С помощью Google Apps Script можно переводить текстовые строки с одного языка на другой. Пример: Var word = LanguageApp.translate("кукушка", "ru", "es");
Logger.log(word);
// Скрипт выведет в консоль "cuco" - кукушка по-испански
Коды для языков можно посмотреть в адресной строке сервиса Google Translate. Если выделить код и нажать Google Apps Script может работать с файлами пользователя, размещенными на Google Drive. Этот скрипт выводит в консоль имена всех файлов пользователя: Var files = DriveApp.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(file.getName());
}
К файлам можно применять несколько десятков различных методов. Вот некоторые из них: Адресная книга также может быть подвергнута автоматизированной обработке. Приведенный ниже код копирует все контакты из группы «Редакция» в лист 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 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 внутрь гаджета, необходимо в меню редактора скриптов выбрать пункт «Publish -> Deploy as web app». А если нажать Можно настроить скрипт так, чтобы он выполнялся после определенного события. К примеру, после открытия/редактирования электронной таблицы или отправки данных формы. Для этого существует сервис для работы с базами данных 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. В целях расширения кругозора и стимуляции творческого воображения приведем краткий обзор возможностей приложений, работу которых можно автоматизировать с помощью Google Apps Script. По старой доброй традиции, которой уже почти три месяца, мы выложили несколько исходничков на GitHub: У Google есть множество API для разработчиков, которые можно внедрять в программы, написанные на Google Apps Script. Для этого надо подключить в редакторе скриптов эту возможность (в меню Resources, далее Advanced Google services). После этого можно будет задействовать возможности следующих сервисов: Я немного смущен тем, как новые библиотеки должны быть опубликованы. Я создаю то, что я считаю очень классной и полезной библиотекой для скриптов Google Apps. Но я не знаю, где я могу опубликовать это, чтобы другие могли наслаждаться и предоставлять некоторую обратную связь. Я замечаю, что я могу опубликовать свой скрипт в качестве шаблона, но я считаю, что это позволит другим импортировать мой скрипт и редактировать по своему усмотрению, но если есть обновления, им нужно будет снова импортировать мой код. новая функция библиотеки, с другой стороны, требует, чтобы пользователи узнали о вашем идентификаторе приложения, чтобы импортировать его в свои проекты. На сегодняшний день единственным местом, где перечислены библиотеки, является « Notable Script Libraries » на сайте разработчиков Google. Но это только для выбранных вручную библиотек из Google. Поэтому мои вопросы здесь:
Когда следует публиковать мой скрипт в качестве шаблона, а не публиковать его как библиотеку? Они кажутся немного перекрывающимися для меня. Как другие люди делятся своими библиотеками? Планирует ли Google какой-то каталог?INFO
Работа с почтой
WARNING
Работа с Google Translate
INFO
Работа с Google Drive
Работа с Google Contacts
Работа с Google Tasks
Работа с календарем
Формы обмена скриптами
INFO
События
Работа с базами данных
Приложения, с которыми может взаимодействовать Google Apps Script
SRC
Advanced Google Services
Чтобы помочь тем кто заинтересуется программированием "под ячейки", предлагаю тут простой "урок" по созданию скриптов для Google Spreadsheet.
Создаём скрипт
Язык написания кода: JavaScript, а модель с которой можно работать включает в себя листы, ячейки, диапазоны и окна ввода-вывода для взаимодействия с пользователем.
Тут всё достаточно просто: Объект SpreadshettApp даёт нам экземпляр документа из которого мы берём первый лист. Объект Browser позволяет нам запрашивать данные у клиента и сообщать ему что-нибудь диалоговыми окнами. Для чтения/записи данных ячеек получаем её из листа методом getRange а затем используем методы getValue/setValue.
Классический вариант - запуск кнопкой, делаем так: вставляем на лист рисунок через "Вставка"->"Рисунок" а затем в меню рисунка (показывается при клике на него правой кнопкой) выбираем "Назначить скрипт". В появившемся поле ввода указываем имя функции.
Также можно добавить свой пункт в меню документа, причём сделать это программно. Добавляем в нашем скрипте сточку:
и получаем.Основы использования
WARNING
Работа с Google Docs
WARNING
Работа с Google Translate
INFO
Работа с Google Drive
Работа с Google Contacts
Работа с Google Tasks
Работа с календарем
Формы обмена скриптами
INFO
События
Работа с базами данных
Приложения, с которыми может взаимодействовать Google Apps Script
SRC
Advanced Google Services