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). Теперь перейдем к более практически полезным примерам.



WARNING

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

Работа с Google Docs

Когда встает задача автоматизации работы с офисными документами, первым делом на ум приходит 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

WARNING

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

Работа с Google Translate

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

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

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

INFO

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

Работа с 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 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 внутрь гаджета, необходимо в меню редактора скриптов выбрать пункт «Publish -> Deploy as web app».

INFO

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

События

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

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

Для этого существует сервис для работы с базами данных 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 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. Примечателен возможностью узнать демографические и географические характеристики пользователей, смотрящих определенный видеоролик. Ведь интересно выложить очередную копию клипа на песню «До свидания, кореша» и проанализировать, какого пола, возраста и места жительства ее слушатели.

Я немного смущен тем, как новые библиотеки должны быть опубликованы.

Я создаю то, что я считаю очень классной и полезной библиотекой для скриптов Google Apps.

Но я не знаю, где я могу опубликовать это, чтобы другие могли наслаждаться и предоставлять некоторую обратную связь. Я замечаю, что я могу опубликовать свой скрипт в качестве шаблона, но я считаю, что это позволит другим импортировать мой скрипт и редактировать по своему усмотрению, но если есть обновления, им нужно будет снова импортировать мой код.

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

На сегодняшний день единственным местом, где перечислены библиотеки, является « Notable Script Libraries » на сайте разработчиков Google. Но это только для выбранных вручную библиотек из Google.

Поэтому мои вопросы здесь:

Когда следует публиковать мой скрипт в качестве шаблона, а не публиковать его как библиотеку? Они кажутся немного перекрывающимися для меня.

Как другие люди делятся своими библиотеками? Планирует ли Google какой-то каталог?

Доброго времени суток, дорогие читатели, вредины, злодеи, доброжелатели и прочие личности. Сегодня мы про Google Scripts , точнее скрипты в таблицах как таковые.

Я думаю, что очень многие из Вас умеют пользоваться Excel "ем или , а некоторые, может, даже и .

Те, кто пользуется диском Google (Google Drive ), наверное уже использовали Таблицы (Spreadsheets ) и заметили, что по функционалу они немного уступают Экселю, но тем не менее это всё ещё мощный инструмент.

Так вот, в Экселе были макросы (этакие команды, упрощающие и автоматизирующие вычисления) , написанные на небезызвестном языке VBA (Visual Basic for Applications) . В Таблицах Google также есть макросы, которые именуются скриптами и пишутся уже на языке Javascript . С ними мы сегодня и познакомимся.

Я заранее Вас предупреждаю о возможной сложности дальнейшего примера, т.к. он не столько обучающий, сколько.. Мм.. Так сказать, конечный факт, которым Вы можете пользоваться и.. И развивать, если это Вам знакомо.

Соберитесь в комочек мозга.. И приступим:)

Создание таблицы Google Drive / Scripts и наполнение её контентом

Рассмотрим такую простенькую задачку:
У нас есть две колонки, в первой мы пишем названия фруктов, а во второй цвет, который соответствует этому фрукту. И мы хотим, чтобы при вводе цвета в колонке цветов автоматически менялся бы цвет названия фрукта.

Если Вы забыли как вообще пользоваться документами Google , то милости просим почитать соответствующую и уже упомянутую выше . Если Вам это не нужно совсем, то читать наверное и дальше даже нет смысла. Хотя, конечно, кому что:)

Так вот, создаем новую таблицу Google , именуем её, например, "Фрукты ". Ну, как, например.. Учитывая, что пример про фрукты, то.. Ну Вы поняли:)

Теперь добавляем на первый лист наши фрукты и цвета:

Примечание! Для того, чтобы считались фрукты, введите в ячейку А1 формулу:

Хотите знать и уметь, больше и сами?

Мы предлагаем Вам обучение по направлениям: компьютеры, программы, администрирование, сервера, сети, сайтостроение, SEO и другое. Узнайте подробности сейчас!

="фрукт ("&COUNTA(A2:A)&")"

Теперь создадим макрос. Для этого идем в меню "Инструменты " и выбираем "Управление скриптами ". Появится всплывающее меню, где мы жмем на кнопку "Создать ".

В появившемся окошке выбираем "Пустой проект ".

Откроется редактор, который на первый взгляд (да и на второй) может вызвать ступор.

Собственно, что дальше? А дальше мы начинаем писать наш собственный макрос ручками (да, всё самостоятельно). Как будет выглядеть наш макрос? Нужно составить схемку сего процесса (иначе этот процесс займет у Вас очень много времени).

Нам нужно:

  1. Достать значения цветов из второй колонки;
  2. В соответствии с этими значениями задавать цвета для первой колонки.

Итак.. Вроде бы всё просто.. Если знать, как это делать, конечно:)

шКоддинг

Перейдем к самому коду:

Function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{name: "Покрасить",functionName: "MakeMeHappy"}]; sheet.addMenu("Скрипты", entries); }; function MakeMeHappy(){ var sheet = SpreadsheetApp.getActiveSpreadsheet(); var range = sheet.getActiveRange(); var data = range.getValues(); if(range.getColumn() == 2){ for (var i=0;i < data.length;i++){ range.offset(i,-1,1,1).clearFormat(); range.offset(i,-1,1,1).setHorizontalAlignment("center"); range.offset(i,-1,1,1).setVerticalAlignment("center"); switch (data[i]){ case "зеленый": case "Зеленый": range.offset(i,-1,1,1).setFontColor("#00dd00"); break; case "салатовый": case "Салатовый": range.offset(i,-1,1,1).setBackgroundColor("#87dd47"); break; case "желтый": case "Желтый": range.offset(i,-1,1,1).setBackgroundColor("#ffff00"); break; case "оранжевый": case "Оранжевый": range.offset(i,-1,1,1).setFontColor("#dd7711"); break; case "красный": case "Красный": range.offset(i,-1,1,1).setFontColor("#dd0000"); break; case "фиолетовый": case "Фиолетовый": range.offset(i,-1,1,1).setFontColor("#800080"); break; default: break; } } } };

Теперь я постараюсь Вам его объяснить. Функция onOpen добавляет меню "Скрипты " к таблице при открытии оной. И выглядит это дело так:

Теперь по коду:

Var sheet = SpreadsheetApp.getActiveSpreadsheet();

Эта строчка добавляет в переменную sheet идентификатор открытого нами документа, чтобы потом по нему обращаться к документу.

Var entries = [{name: "Покрасить",functionName: "MakeMeHappy"}];

Эта переменная-массив содержит список названий менюшек и функций, которые выполняются при клике на эти менюшки.

Sheet.addMenu("Скрипты", entries);

Этот метод добавляет к нашему документу меню "Скрипты ".

Функция MakeMeHappy, собственно, и будет нашей главной функцией, которая красит фрукты.
Сначала я объявляю переменные:

Var sheet = SpreadsheetApp.getActiveSpreadsheet(); var range = sheet.getActiveRange(); var data = range.getValues();

Соответственно, в переменной sheet находится идентификатор нашего документа. В переменной range находится выделенная нами область (например, ячейки B2:B6 ), в переменной data находятся значения этих ячеек в виде массива.

If(range.getColumn() == 2){...}

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

For (var i=0;i < data.length;i++){...}

В этом цикле мы проходимся по каждой ячейке из диапазона B2:B

Range.offset(i,-1,1,1).clearFormat(); range.offset(i,-1,1,1).setHorizontalAlignment("center"); range.offset(i,-1,1,1).setVerticalAlignment("center");

Эти три свойства убирают форматирование ячеек A[i] (например, A1 , A2 , A3 и т.п., т.к. мы внутри цикла), а также центрируют значения в ячейке по вертикали и горизонтали.

Тут следует иметь в виду, что т.к. наш диапазон соответствует второй колонке (В2:В ), а нам надо убрать форматирование и отцентровать первую колонку, то для этого используется метод offset (номер ряда диапазона, номер колонки, кол-во рядов, кол-во колонок). Например, метод range.offset(0 ,1,4,3) для ячейки B2 (т.е. range соответствует B2:B2 ) будет означать, что мы будем воздействовать не на ячейку B2:B2 , а на диапазон [ B + 1][ 2 + 0]:[ В + 3][ 2 + (4 -1)] = C2 :E5 . Более подробно сморите в .

Switch (data[i]){ case "зеленый": case "Зеленый": range.offset(i,-1,1,1).setFontColor("#00dd00"); break; case "салатовый": case "Салатовый": range.offset(i,-1,1,1).setBackgroundColor("#87dd47"); break; ... }

Функция switch является так называемым переключателем. Она смотрит значение переменной и в соответствии с тем, что в ней хранится, выполняет определенное условие "case ". Можно её переписать в стандартном виде if else . Но получится очень неудобно. Например:

Switch (c){ case 1: условие_1; break; case 2: условие_2; break; case 3: условие_3; break; default: условие_4; break; }

Будет эквивалентно функции:

If (c == 1) условие_1; else if (c == 2) условие_2; else if (c == 3) условие_3; else условие_4;

Т.к. можно ввести цвет как с большой, так и с маленькой буквы, то нам надо по два условия, что соответствует записи case "зеленый": case "Зеленый": действие; break; (у меня это записано блочной структурой) . Нужно иметь в виду, что после каждого действия надо писать функцию break ; т.к. иначе мы будем выполнять все условия по порядку, а не то, которое нам надо. Условие default используется в том случае, если для нашей переменной нет подходящего условия.

Range.offset(i,-1,1,1).setFontColor("#00dd00");

Методы setFontColor и setBackgroundColor задают цвета текста и фона в виде #rrggbb (r-red, g-green, b-blue, диапазоны цветов) соответственно.

Теперь проверим функцию. Выделяем диапазон B2:B9 , заходим в меню "Скрипты " и выбираем опцию "Покрасить ". Смотрим, как наши фрукты обрели жизнь цвета:)

В общем-то на этом всё. Но не совсем.

Скрипты и макросы таблиц Google, дополнение

Но можно сделать небольшое дополнение, чтобы не приходилось каждый раз запускать функции вручную.

Для этого зайдите в редакторе скриптов в меню "Ресурсы " и выберите там "Триггеры текущего проекта ". Откроется менюшка, в которой уже будет наша функция onLoad . Добавляем новую функцию (1 ) и задаем название функции (2 ) и тип активации оной (3 ). Также можно нажать на "Уведомления " и добавить/убрать свой почтовый адрес из списка уведомлений.

Они будут приходить в случае, если скрипт выполнялся с ошибками.

Конечный результат действа:

Продолжения - -готовим и три. Ну и комментарии конечно содержат много вкусного.

P.S. За существование оной статьи отдельное спасибо другу проекта и члену нашей команды под ником “barn4k“.

Всем привет

Вариантов использования Google Apps Scripts множество. Мой друг работал с иностранным заказчиком и тот просил каждый день отчет ему на почту с текстом кто и что делал. В результате он попросил сотрудников трэкать все в гугл таблицу не позднее 21:00, потом стартовал скрипт и собирал данные и слал по нужному адресу.
В статье я приведу простой и, как мне кажется, полезный пример использования Google Apps Scripts.

Для программного доступа к данным от Flurry выполните инструкции по ссылке:
support.flurry.com/index.php?title=API/GettingStarted

В итоге вы получите ключ, который нужно сохранить для использования в скрипте.
Еще понадобится “ProjectApiKey” от Flurry, который вы уже используете в мобильном приложении.

Пишем скрипт

Точнее уже все написано, тут я просто опишу, как это запустить.
Идем по ссылке и забираем тексты скриптов github.com/chapayGhub/flurrymetricstospreadsheet
В проекте, который мы создали до этого, нужно создать такие же.

Теперь, после того как все сделали, откройте Settings.gs и в нем
Введите свои ключи от Flurry
//store Flurry credentials FlurryCredentials = (function() { var obj = {}; obj.AccessCode = "?????"; obj.ApiKies = { iPad: "????", }; return obj; })();

Тут введите свое имя электронной почты, лучше от гугл(другие я не проверял)
obj.emails = ["?????email1", "?????email2", "?????email3"];

Скрипт настроен на получение метрик приложения из Flurry + на ваш почтовый ящик придет письмо, что вы добавлены как редактор.

Запускаем и дебажим

В левой панели выберем скрипт «СreateStatisticReport»
В верхней панели около кнопки с жуком в выпадающем списке выбираем «makeStatisticReport»

Теперь все просто верхняя панель имеет две «супер» кнопки понятные любому программисту.

Запуск по расписанию

Выполните действия на картинках

Нюансы

Сделать так чтобы скрипт работал каждый раз с одним документом
Сразу запустите на выполнение не на дебаг. Должен создаться документ в папке «Statistic» и к вам на почту придут письма, в одном из которых будет идентификатор созданного документа
Присвойте его переменной расположенной в скрипте Settings.gs.
obj.mainStatisticDocID
Теперь скрипт будет обнолять именно этот документ, а не создавать каждый раз новый. Если данный параметр не введен, то при старте скрипт пытается найти документ по несуществующему идентификатору, естественно не находит его, бросает исключение(в дебаге может быть остановка в этом месте выполнения), но это исключение отлавливается и создается новый документ.
Логирование
Используйте следующий метод
Logger.log("ТЭКСТ!");
Чтобы просмотреть вывод выберите следующий пункт из меню

Нужна помощь

Браузерный редактор вещь удобная, но вот если скрипт будет более объемным то в нем не совсем удобно работать.
По этой ссылке ниже описано как можно выгружать и загружать проект.
developers.google.com/apps-script/import-export

У меня появилась идея написать скрипт который на входе получал идентификатор проекта выгружал его на локальный диск в отдельные файлы. Эти файлы затем можно было бы по человечески отрефакторить и в конце опять через этот скрипт загрузить обратно.

Вроде все и описано, но вот что-то не выстрелило у меня).

Может уже кто-то сделал такое или есть полезные ссылки? Буду благодарен.

Ссылки

Заглавная из этой точки можно начинать искать ответы на вопросы по Google Apps Scripts
developers.google.com/apps-script

P.S.
Я никогда не работал с подобными сервисами и обладаю поверхностным знанием JavaScript, буду рад конструктивным замечаниям.

В далёких 90-х я начинал осваивать программирование, и первые мои "коммерческие" приложения были написаны на VBA под MS Excel. До сих пор помню как удобно было работать, имея готовый интерфейс, функции для манипуляции данными и адресуемые ячейки... Этот, в принципе, нормальный путь для обучения программированию, сейчас имеет несколько недостатков. Во-первых, нехорошо с первых приложений связывать себя с поприетарной средой разработки и исполнения кода, а во-вторых, кому сейчас нужен Visual basic?. Вот JavaScript и GoogleDoc - другое дело. Да и возможностей, учитывая "web-интерфейсность" среды исполнения и открытые API, существенно больше.
Чтобы помочь тем кто заинтересуется программированием "под ячейки", предлагаю тут простой "урок" по созданию скриптов для Google Spreadsheet.


Создаём скрипт

Надеюсь, у вас уже есть Google аккаунт. Входим в свой Google Drive, создаём новы документ Google Spreadsheet. Выбираем в меню нашего нового документа "Инструменты"->"Редактор скриптов" и получаем окно, где можно собственно приступить к программированию.
Язык написания кода: JavaScript, а модель с которой можно работать включает в себя листы, ячейки, диапазоны и окна ввода-вывода для взаимодействия с пользователем.

Пишем код

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) ; }
Тут всё достаточно просто: Объект SpreadshettApp даёт нам экземпляр документа из которого мы берём первый лист. Объект Browser позволяет нам запрашивать данные у клиента и сообщать ему что-нибудь диалоговыми окнами. Для чтения/записи данных ячеек получаем её из листа методом getRange а затем используем методы getValue/setValue.

Вызываем нашу функцию

Есть несколько способов вызвать наш скрипт из Spreadshett-а. Вариант с вызовом через меню "Инструменты"->"Управление скриптами" мы не рассматриваем как неюзабельный.
Классический вариант - запуск кнопкой, делаем так: вставляем на лист рисунок через "Вставка"->"Рисунок" а затем в меню рисунка (показывается при клике на него правой кнопкой) выбираем "Назначить скрипт". В появившемся поле ввода указываем имя функции.
Также можно добавить свой пункт в меню документа, причём сделать это программно. Добавляем в нашем скрипте сточку:

Ss.addMenu ("Test" , [ { name : "Test" , functionName: "myFunction" } ] ) ;
и получаем.