Сервисы Google крайне популярны во всем мире. Gmail, Sheets, Drive, Forms и многое другое знакомо большинству пользователей интернет. Вряд ли можно найти человека, у которого нет почты Google.
Нам, как программистам, интересна возможность использовать сервисов Google в собственных проектах. Google Apps Script позволяет не только интегрировать сервисы Гугла внутри своих проектов, но и выстраивать объемные мощные решения исключительно на стороне Google.
Google Sheets могут выступать, как полноценная база данных, способную принимать и отправлять данные. Можно интегрировать таблицы с почтой, календарем, формами и другими продуктами компании. Даже полноценный веб-сайт можно построить исключительно на скриптах и HTML-шаблонах.
Хватит хвалить, пора знакомится ближе.
Все уроки цикла легко найти используя хештэг: #уроки google apps script spreadsheet
или в моем блоге: Блог Программиста
Знакомство с Google Apps Script
Это полноценная платформа разработки на базе JavaScript. Фактически, разработчикам доступен полноценный JS с библиотеками, которые обеспечивают легкий доступ к сервисам Google.
Для начала работы надо перейти по адресу https://script.google.com/home и нажать «Создать проект». Перед нами среда разработки Google. Начнем с названия проекта, чтобы он у нас не потерялся. Кликаю на заголовок и меняю на «First Project»
Сам редактор интуитивно понятный. В левой части всплывающее меню, через которое можно получить информацию по проекту, перейти в управление триггерами, настройки проекта или к самому коду.
Чуть правее файлы с кодом и шаблонами, созданные нами библиотек и подключенные к проекту сервисы Google. Обо всем этом поговорим, но позже. Остальные элементы интуитивно понятны.
Готовим все необходимое для программирования
Нечего в бирюльки играть, будем сразу работать по-взрослому. Напишем проект, который получит данные с популярного ресурса для тестов https://jsonplaceholder.typicode.com
Получим данные о пользователях и сохраним их в таблицу. Не забудьте заранее создать табличку и скопировать ее идентификатор. Для этого, переходим на https://docs.google.com/spreadsheets/u/0/?tgif=d и жмем плюсик. Меняем название и копируем из адресной строки все, что находится между «spreadsheets/d/» и «/edit»
Это идентификатор таблицы. Он потребуется для открытия файла из скрипта. Поэтому, возвращаемся в среду разработки и жмем плюс, рядом с надписью «Файлы». Тип файла, соответственно, скрипт.
Я назвал файл «const», расширение «.gs» добавится автоматически. Как понятно из названия, в нем будут храниться константы. Запомните, деление на файлы, в Apps Script, условно. Любые переменные и функции доступны глобально. Поэтому, внимательно следите за именами функций и переменных, а так же используйте особенность для формирования удобной структуры проекта.
Получаем данные и сохраняем в таблицу
По умолчанию создаваемая функция myFunction() не имеет сакрального смысла. Спокойно переименовываем ее в, например, main(). Для начала пишем такой код:
Используя библиотеку UrlFetchApp получаем данные. Библиотека работает подобно стандартному методу fetch в JavaScript. После выводим ответ сервера в журнал выполнения.
При первом запуске, среда разработки попросит разрешения. Дадим его ей. После выбора аккаунта, найдите справа надпись мелким шрифтом «Скрыть дополнительные настройки», кликнув на нее ищите «Перейти на страницу "First Project" (небезопасно)».
Данные получены. Давайте обработаем и сохраним их. Для начала, распарсим ответ в JSON, через JSON.parse(). Далее скриптом обойдем весь массив данных и по очереди сохраним значения в таблице. Не забыв, предварительно, получить к ней доступ через SpreadsheetApp.
В примере, я использовал метод Array.map(). Если вы с ним плохо знакомы, обход можно реализовать обычным циклом JS:
Метода appendRow принимает одномерный массив, который после раскладывает по ячейкам в последней строке. Если строк не хватает, метод добавит новую строку. Обратите внимание, что информация помещается в строку идущую за последней содержащей информацию. Если у вас заполнено 10 строк, потом через 1000 строк где-то в ячейке есть значение, метод добавит новую информацию после той строки.
Минус метода appendRow в его медлительности. Чтобы посмотреть скорость выполнения, во всплывающем меню слева находим «Количество выполнений». У меня, время выполнения заняло 3,854 секунды. Большую часть времени ушло на добавление данных.
Оптимизируем код
Слегка изменим код. В методе map уберем добавление ячейки, вместо этого будем возвращать массивы значений и складывать их в массив data. После, используя getRange получим диапазон ячеек, в который будем вставлять значения. В нашем случае, указываем: стартовую строку (у меня 2 из-за заголовков таблицы, вообще отсчет идет с 1), стартовый столбец, сколько строк нужно включить в диапазон и количество столбцов диапазона. Соответственно, количество нужных строк получаем из длинны массива data, а количество столбцов считаем ручками. Можно заморочитсья и сделать более универсальный метод, получая размер нулевого элемента массива data... так будет более правильно и универсально.
Все, что осталось сделать, это сохранить значения используя setValues. Метод принимает массив массивов. Обратите внимание, что он бывает и в единичном числе — setValue(). Тогда нужно использовать одномерный массив и значения подставятся в одну строку.
Запускаем тест и видим огромную разницу во времени выполнения. Вместо, почти, 4х секунд получили 0,731 секунды.
Для первого раза, думаю достаточно. В следующий раз, сделаем для проекта веб-интерфейс. Тем, хочется получить материал быстрее, может прочитать следующий урок на моем сайте
Реклама
Мечтаете научиться программировать и зарабатывать хорошие деньги в разработке? Хватит мечтать, пора действовать. Записывайтесь на факультет «Fullstack JavaScript» от GeekBrains. Освойте с нуля язык программирования JavaScript, чтобы стать Fullstack-разработчиком. Вы научитесь создавать сайты, мобильные приложения и высоконагруженные сервисы.
Сейчас действует скидка, вы можете сэкономить 25% Тем более, обучение можно купить в рассрочку.
К сведению, зарплата Fullstack JavaScript легко достигает 250 000 руб., а устроиться можно удаленно из любой точки мира. GeekBrains еще и с трудоустройством помогает.
Хватит откладывать, переходите по ссылке и записывайтесь!
#уроки google apps script spreadsheet #блог программиста #google sheets #google script #javascript