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


Оглавление (нажмите, чтобы открыть):

Разработать скрипт Google Apps Script для Google Таблицы

Смотрите также:

Похожие задания

Другие задания в категории «Web-разработка»

Нужен анимационный видеоролик о крмпании. Продлжительность минута. Также нужена будет дткторская озвучка к тексту в ролике. Продожттельность минута. Прикладывайте свои примеры похожих ребот.

Нужно сделать декор по типу как на фото. Материалы есть Можем закупить дополнительно

Артем Б. Варшавское шоссе, 28А, Москва

Пробковая или деревянная карта мира 200 см, детализированная

Нужно оформить действующий ютуб канал, и оптимизация в поисковой системе ютуба

Нужно разработать логотип сайта создать шапку для Инстаграма и вк

Google Apps Script с чего начать изучение?

Доброго времени суток.
Подскажите пожалуйста материалы (видео и текстовые) с которых можно начать изучение JavaScript чтобы в дальнейшем применять его в разработке аддонов в Google Apps Script. (большинство материалов которые я нахожу ориентированы либо на разработку сайта либо на работы в node.js)

В идеале материалы в которых подробно разобрано большое количество кейсов (50-60% практики к теории)

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

Уровень знаний JavaScript средний/ниже среднего (нет практики разработки на js, только как хобби)

Простой пример использования HTML в Google Apps Script на примере GoogleSheet

А вы знали, что в Google Apps Script можно использовать HTML страницы со скриптами (javascript) и даже JQuery(с небольшими ограничениями) — совсем как сайты? Сейчас мы покажем простой пример этого!

Итак приступим. Для примера создадим новую таблицу в GoogleSheet. В ней создадим 2 вкладки: test и problems.
На вкладке test сделаем кнопку (для удобства), по которой будет вызваться наш скрипт:

На вкладке problems сделаем таблицу с 3 столбцами — Имя, Браузер, Описание проблемы:

Теперь заходим в редактор скриптов и создаем новую HTML страницу с названием index:

На этой странице делаем простенькую форму с полями для ввода имени, выбора браузера и описания проблемы. И добавляем 2 кнопки — очистить и отправить. На отправить вешаем скрипт на нажатие кнопки — clickButton()

Выглядеть эта форма будет вот так:

Скрипт на нажатие кнопки — clickButton() — выглядит следующим образом:

Принцип действия скрипта очень прост:

Получаем ссылку на Форму и значения полей Имя и Описание проблемы:

var name = form.elements.name.value
var problem = form.elements.problem.value

Проверяем на заполненность поля Имя:

if(!checkFill(name)) <
alert(‘Не заполнено обязательное поле — ИМЯ’)
return
>
.
function checkFill(objValue) <
if(objValue.length > 0) <
return true
>
return false
>

Проверяем на заполненность поля Описание проблемы

if(!checkFill(problem)) <
alert(‘Не заполнено обязательное поле — ОПИСАНИЕ ПРОБЛЕМЫ’)
return
>
.
function checkFill(objValue) <
if(objValue.length > 0) <
return true
>
return false
>

Получаем наименование Браузера:

google.script.run
.withFailureHandler(onFailure)
.withSuccessHandler(onSuccess)
.writeProblem(name, browser, problem)

Скрипт onFalilure выводит сообщение, что произошла ошибка:

function onFailure() <
alert(‘Проблема с записью. Попробуйте еще раз’)
>

Скрипт onSuccess проверяет возвращенное значение с сервера, и если это true, то модальное окно с HTML формой закрывается специально директивой:

function onSuccess(test) <
if(test) <
google.script.host.close()
>
>

Теперь настало время написать серверный скрипт (в нашем случае — это обычный, стандартный Google Apps Script). Переименовываем автоматически созданный скрипт с названием Код на test и создаем 2 функции:

В функции test мы задаем, что из нашего файла index.html мы создаем HTMLOutput и специально командной показываем модальное окно.
В функции writeToProblem мы получаем 3 значения из HTML формы, записываем их на страницу problems и возвращаем true.
Осталось только к нашей картинке назначить скрипт test и можно проверять результаты нашей работы!

Теперь просто нажимаем на нашу кнопку, появляется форма. Заполняем форму, нажимаем отправить — и на нашей вкладке problems появляется новая запись!

Вот такой простой пример использования HTML в GoogleSheets!

Как обычно, ссылка на пример в Google Sheets:

Каким образом я могу вызывать функции Google Apps Script на своем сайте?

Если вызывать функции возможно, то как в них передать данные? Например, как задать переменные и получить данные?

2 ответа 2

Это слишком общий вопрос.

Представления о понятии сайта слишком разнообразны. Этот раздел знаний будет представляться как серверверное так и клиент-серверное взаимодействие.

Google Apps Script может взаимодействовать с внешним миром посредством двух основных интерфейсов.

Apps Script Execution API позволяет внешним сервисам взаимодействовать со скриптом на уровне REST. Легко, удобно, нет анонимных вызовов.

HTML Service и Content Service позволяют через «внешние раздражители» ввиде запросов http отвечать на них классами HtmlOutput или TextOutput. Для точек входа используются зарезервированные функции doGet(e) и doPost(e). Скрипт должен быть опцбликован как веб-приложение. Удобно, легко, есть анонимные вызовы.

Что такое Google Script? Как написать свой первый скрипт Google Apps

Если вы используете Google Apps, такие как Google Sheets или Google Docs, Google Script позволяет вам делать то, что вы никогда не могли сделать с помощью аналогичного настольного приложения.

Google Script (также известный как Google Apps Script) — это платформа для разработки приложений, которая позволяет интегрировать все используемые вами сервисы Google Cloud.

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

Что вы можете сделать с помощью Google Script?

Изучать Google Script очень просто. Вот лишь несколько вещей, которые вы можете сделать с помощью Google Script:

  • Создание пользовательских функций в Google Sheets
  • Интеграция Google Sheets или Google Docs с Gmail
  • Создание веб-приложений, которые вы можете развернуть с помощью Сайтов Google
  • Добавление пользовательского меню в Документы Google
  • Создание панелей мониторинга веб-трафика в Google Sheets

используя данные Google Analytics
Отправка электронной почты из Google Sheets

или любой другой сервис Google

Поскольку все службы Google находятся в облаке, вы можете создать свой скрипт Служб Google из одного редактора скриптов. Из этого кода вы можете подключиться к API-интерфейсам для любых услуг Google, которые вы используете.

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

Написание вашего первого скрипта Google Apps

Чтобы увидеть, как легко написать скрипт Google, попробуйте следующий пример.

Ваш первый сценарий отправит электронное письмо из вашей учетной записи Gmail, и сообщение будет встроено в ваш Google Script.

  1. Откройте веб-браузер и введите script.google.com в поле URL.
  2. Войдите в свой аккаунт Google, если вы этого еще не сделали.
  3. После входа в скрипт Google Apps нажмите на Новый скрипт.
  4. Где это говорит Без названия проект, введите имя Мой первый сценарий.

Удалите код в окне скрипта и вставьте следующее:

Нажмите на значок диска, чтобы Сохранить код. Затем нажмите на Бежать значок, чтобы запустить его.

Возможно, вам потребуется предоставить разрешение на запуск сценария с использованием вашей учетной записи Google в первый раз и отправить сообщение электронной почты из вашей учетной записи Gmail.

Может появиться предупреждение о том, что приложение не проверено. Просто нажмите на продвинутый а также Перейти к моему первому сценарию (небезопасно). Поскольку вы являетесь тем, кто написал приложение, вы можете быть уверены, что оно совершенно безопасно для запуска.

Вот как будет выглядеть это входящее письмо:

Этот скрипт использовал службу Gmail для отправки электронного письма из вашей учетной записи через Google Script.

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

Добавление дополнительных функций в службы Google

Вы также найдете доступ к Google Scripting из многих сервисов Google.

Как упоминалось выше, это позволяет добавлять расширенные функции к этим службам. Например, в Google Sheets вы можете получить доступ к своему редактору скриптов Google, нажав на инструменты, а затем нажмите на Редактор скриптов.

Ранее мы рассматривали примеры создания пользовательских функций и меню в Google Sheets.

, Это отличный ресурс, чтобы начать создавать свои собственные.

Вы можете получить доступ к редактору Google Scripts таким же образом из Документов Google.

Вы даже можете использовать Google Script для создания надстройки Gmail, чтобы повысить удобство работы с Gmail. Это позволяет вам изменять такие вещи, как окно создания сообщения или даже писать скрипт, который управляет архивированием старых писем.

Чтобы включить разработку и тестирование надстроек Google Script, необходимо включить надстройки разработчика в своей учетной записи Gmail. Вы можете сделать это, перейдя в настройки, затем нажмите на Дополнения и выбрав Включить дополнения разработчика для моей учетной записи. Вам нужно нажать включить на всплывающем окне, а также.

Создание дополнений Gmail выходит за рамки этой статьи. Но если вы серьезно относитесь к этому, вы можете изучить Руководство разработчика Google по созданию дополнения Gmail.

Доступ к API скриптов Google

Из вашего редактора Google Script вы можете получить доступ к каждой из ваших служб Google с помощью глобального объекта. Вы использовали глобальный объект GmailApp в приведенном выше примере Hello World.

Чтобы получить доступ ко всем функциям (методам и вызовам, которые вы можете совершать из редактора Google Script), вам просто нужно включить расширенные службы Google для этой службы.

Вы делаете это из редактора Google Scripts, нажимая на Ресурсы а также Расширенные сервисы Google.

Не забудьте нажать на Панель инструментов API Google Cloud Platform ссылку внизу и включите сервис в этой панели.

Как только вы окажетесь на панели инструментов API Google Cloud Platform, нажмите Включить API и сервисы, найдите название службы в библиотеке API, выберите ее, а затем нажмите включить.

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

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

Вы можете увидеть отличный пример интеграции с Google Analytics с помощью Google Scripting в нашем руководстве по созданию панели аналитики веб-сайта.

Просмотр библиотеки API показывает, сколько Google Services вы можете интегрировать в свои скрипты.


Существуют сотни доступных API.

Если вы заинтересованы в том, чтобы стать суперпользователем Google, изучите, как использовать Сценарии Google App — это, безусловно, путь.

Помимо основ Google Script: что теперь?

Как видно из простого примера Hello World, научиться писать Google Script совсем не сложно.

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

Если вы хотите начать работу с более продвинутым приложением Google Script, попробуйте свои силы в интеграции Google Forms и Gmail.

Dev Автоматизируем Google Документы на Google Apps Script

3 примера кода, которые стоит сохранить на будущее.

Продолжаем рассказывать о приемах автоматизации работы с сервисами Google. Многие думают о Google Docs, как о приложении предназначенном для просмотра таблиц, присланных по почте. Но это не так. У этого табличного процессора есть больше сотни встроенных формул для расчетов, обширный набор инструментов для форматирования и обработки данных.

Одно из важных достоинств Google Docs, не считая коллективной работы над документом из всех уголков планеты — возможность использовать Google Apps Script для автоматизации и интеграции с другими сервисами Google.

Попробовать рецепты из статьи очень просто:

  1. Заходим на docs.google.com и авторизируемся;
  2. Создаем новую электронную таблицу;
  3. Открываем Инструменты ->Редактор скриптов;
  4. Вбиваем в окошко код из примеров и вносим свои правки;
  5. Нажимаем на кнопку Запустить и даем скрипту все разрешения, которые он попросит.

Предположим, нам нужно составить отчет о тратах на коммунальные услуги в течение трех лет. У нас есть стопка квитанций и данные из них мы хотим занести в электронные таблицы на Google Sheet. Для каждого года нужно создать отдельный файл с 12 листами-месяцами. На каждом листе сделать шаблон для записи значений и добавить немного дизайна. А когда все данные будут внесены, построить график для их визуализации.

Такая структура документа не слишком удобна для хранения данных, но рассмотрение этой задачи поможет понять, каким образом Google Apps Script взаимодействует с электронными таблицами.

Генерация документов

Создадим документы «Коммунальные счета 2012», «Коммунальные счета 2013» и «Коммунальные счета 2014». В каждом документе сделаем листы с названиями месяцев, на каждом листе в первом столбце запишем виды коммунальных услуг.

(5.00 из 5, оценили: 2)

  • Твитнуть
  • Поделиться
  • Рассказать

Ирина Чернова

Рас*здяйка. Графоманка. Боюсь людей. Страдаю манией величия. Фото удалено модераторами, так как внешность безнадежно испорчена тяжелой жизнью.

Госдума хочет повысить цены в App Store

Samsung выплатит Apple $548 млн компенсации

Обзор The Outer Worlds. Это лучшая RPG года

Обзор Philips PRO 6305. Когда наушники с Hi-Res стоят недорого

Полгода хожу с Xiaomi Redmi Note 7. Его зря так любят в России

Неделю хожу с кнопочным телефоном Xiaomi. Интересная штука

Новые Sennheiser Momentum 3 с шумодавом и без провода. Улётный звук

�� Комментарии 40

Подскажите кто может написать небольшой математический скрипт за деньги для гугл док

@Бату Караев , пишите свою задачу отвечу в комментах)

Ссылка на “Google Apps Script для Docs в примерах” не работает.

Хех!После коммента тут разместил задачу на бирже и уже имею нужный скрипт!
Фрилансер написал мне код который прибавляет нужный результат вычислений ко всем ячейкам столбца.
Не ожидал что так быстро решу свою задачу,обошлось мне в 150грн.

добавил в закладки

@Ирина Чернова , Вам спасибо. Тема интересная.

Очень интересные темы со скриптами, только примеры какие-то…

@Max K. , примеры придуманы такие, чтобы в одной компактной статье показать максимум практических приемов использования Google Apps Script) А какие бы Вы примеры предложили?:-)

@Ирина Чернова , Я, честно говоря, хотел ответить именно с примером, но в голову ничего не пришло 🙂

@Max K. , да, придумывание примеров самое трудное в работе над статьями про скрипты)

Побольше бы комментариев в коде

Еще понять как необходимые функции находить.

@Sergey , а какие функции вам нужны?)

На данный момент пока не знаю=) Например, таймер поставить между 3мя скриптами. А запуск и остановку скрипта по кнопке из таблицы можно осуществить или это другими способами делается? Не думаю, что корректно его всегда запускать по кнопке плей из редактора.

@Sergey , да таймер есть: Utilities.sleep(1000); можно сделать пользовательское меню в Google Docs, так удобнее, ну и можно сделать кнопку на листе)))))

@Sergey , вам проще всего создать меню в документе. Это легко.
1. Объявляем функцию для добавлению меню
function createMenu() <
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [
<
name : “Первый скрипт”,
functionName : “myFirstScript”
>,
<
name : “Второй скрипт”,
functionName : “mySecondScript”
>
];
currentSheet.addMenu(“Мои скрипты”, entries);
>

@Sergey ,
2. Объявляем функции которые будем вызывать из меню
function myFirstScript()
<
currentSheet.getRange(“A1”).setValue(“Первый скрипт сработал”);

>
function mySecondScript()
<
currentSheet.getRange(“A2”).setValue(“Второ1 скрипт сработал”);

@Sergey ,
3. Объявляем триггер, который будет добавлять меню в панель при каждом открытии документа:

function onOpen() <
createMenu();
>

@Sergey , а зачем вам останавливать скрипт?

@Ирина Чернова , ой это мне до следующей недели разбираться) останавливать это если скрипт разбил на 3 дня и после первого дня решил поменять текст.

@Sergey , вам, можно поступить так: написать функцию Y которая проверяет какой сегодня день недели и в зависимости от этого вызывает другую функцию (x1, x2 и x3). На открытие документа поставить триггер, который функцию Y запускает. И этот документ при приходе на работу открывать.

@Ирина Чернова , к дате я не хочу привязываться. Может что-то напишу, потом попрошу проверить, если вы не против?)

@Sergey , да. пожалуйста. пишите код в комменты потом)))

@Sergey , а еще лучше написать bash/shell скрипт, который этот документ открывает и в crone настроить его выполнение.
Надо только не забыть у файла настроить, что бы его мог открывать любой у кого есть ссылка.

@Ирина Чернова , моих знаний не достаточно для этого понятия)

@Sergey , хотя если текст у вас на листе записан, вы можете спокойно менять текст в ячейках, ведь скрипт читает оттуда данный непосредственно в момент выполнения строки, в которой чтение этих данных прописано)

Ирина, добрый вечер.

С функциями меню из 3 пунктов, я так и не понял что делать. Подумал, что проще выбирать каждую функцию из редактора скриптов и запускать отдельно. Смысл такой, у меня супруга на работе занимается информационной рассылкой, я решил ей немного упростить жизнь (а себе усложнить) т. к. она всё делает через копию. Плюс у googlе есть ограничение на рассылку – 500 в день, а человек около 1800, поэтому я решил разделить на 3 части. Что то я сделал неправильно, подскажите?
function groupDelivery1() <
// Собираем необходимую информацию из файла
var info = SpreadsheetApp.getActiveSpreadsheet();
var subject = info.getSheetByName(“Лист1”).getRange(“B1”).getValue();
var text = info.getSheetByName(“Лист1”).getRange(“B2”).getValue();
var > // Указываем прикрепляемый файл
var file = DriveApp.getFileById(id);
// Открываем базу с адресами
var tableDoc = SpreadsheetApp.openById(“18scdeAR08HW_7vl38YBaZCIrRo7bNEG9tWARJuSOimU”);
var Sheet1 = tableDoc.getSheetByName(“Лист1”);
var dataRange = Sheet1.getRange(1, 1, rowsAmount, 2);
// Число 300 надо заменить на число адресатов в таблице с адресами
var rowsAmount = 300;
var data = dataRange.getValues();
for (i in data) <
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + text;
MailApp.sendEmail(emailAddress, subject, messageText, );
>
>
function groupDelivery2() <
// Собираем необходимую информацию из файла
var info = SpreadsheetApp.getActiveSpreadsheet();
var subject = info.getSheetByName(“Лист1”).getRange(“B1”).getValue();
var text = info.getSheetByName(“Лист1”).getRange(“B2”).getValue();
var > // Указываем прикрепляемый файл
var file = DriveApp.getFileById(id);
// Открываем базу с адресами
var tableDoc = SpreadsheetApp.openById(“18scdeAR08HW_7vl38YBaZCIrRo7bNEG9tWARJuSOimU”);
var Sheet1 = tableDoc.getSheetByName(“Лист1”);
var dataRange = Sheet1.getRange(1, 1, rowsAmount, 2);
// Число 300 надо заменить на число адресатов в таблице с адресами
var rowsAmount = 300;
var data = dataRange.getValues();
for (i in data) <
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + text;
MailApp.sendEmail(emailAddress, subject, messageText, );
>
>
function groupDelivery3() <
// Собираем необходимую информацию из файла
var info = SpreadsheetApp.getActiveSpreadsheet();
var subject = info.getSheetByName(“Лист1”).getRange(“B1”).getValue();
var text = info.getSheetByName(“Лист1”).getRange(“B2”).getValue();
var > // Указываем прикрепляемый файл
var file = DriveApp.getFileById(id);
// Открываем базу с адресами
var tableDoc = SpreadsheetApp.openById(“18scdeAR08HW_7vl38YBaZCIrRo7bNEG9tWARJuSOimU”);
var Sheet1 = tableDoc.getSheetByName(“Лист1”);
var dataRange = Sheet1.getRange(1, 1, rowsAmount, 2);
// Число 300 надо заменить на число адресатов в таблице с адресами
var rowsAmount = 300;
var data = dataRange.getValues();
for (i in data) <
var row = data[i];
var emailAddress = row[0];
// Поддкорректируйте обращение и текст письма под свои нужды
var messageText = row[1] + text;
MailApp.sendEmail(emailAddress, subject, messageText, );
>
>

@Sergey , Откройте документ в котором должно быть меню и откройте в нем редактор скриптов и введите в него текст

Пользовательские функции в Google Таблицах

Google Таблицы предлагают сотни встроенных функций, таких как СРЗНАЧ (AVERAGE), СУММ (SUM) и ВПР (VLOOKUP). Когда их недостаточно для ваших нужд, вы можете использовать Google Apps Script, чтобы написать собственную функцию, например, конвертирование метров в мили или получение данных непосредственно из Интернета, и использовать ее как обычную встроенную функцию.

Начало

Пользовательские функции создаются с использованием стандартного JavaScript.

Ниже приведена простая пользовательская функция DOUBLE , которая множает входящее значение на 2:

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

Создание пользовательской функции

Чтобы написать пользовательскую функцию:

  1. Создайте или откройте Google Таблицу.
  2. Выберите в главном меню Инструменты > Редактор скриптов. Если вы видите экран приветствия, то выберите «Пустой проект».
  3. Удалите весь код из редактора. Для функции DOUBLE , описанной выше, просто скопируйте его и вставьте в редактор.
  4. Выберите главное меню Файл > Сохранить. Задайте имя проекта и нажмите Готово.

Это все! Теперь вы можете использовать свою пользовательскую функцию.

Получение пользовательской функции из хранилища дополнений

Хранилище дополнений предлагает несколько пользовательских функций в виде дополнений к Google Таблицам. Чтобы использовать или найти дополнение:

  1. Создайте или откройте Google Таблицу.
  2. Выберите главное меню Дополнения > Установить дополнения.
  3. Откроется окно хранилища дополнений. В поле поиска введите «custom function» и нажмите ввод.
  4. Если вы нашли интересующее вас приложение, нажмите на кнопку «+БЕСПЛАТНО» для установки.
  5. Диалоговое окно может сообщить вам, что дополнение требует авторизации. Если это так, внимательно прочитайте сообщение и нажмите «Разрешить». После этого будет установлено дополнение.
  6. Дополнение установлено. Для использования его в других Таблицах откройте любую из них и выберите в главном меню Дополнения > [имя дополнения] > Используйте его в текущей Таблице.

Использование пользовательской функции

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

  1. Нажмите на ячейку, которую собираетесь использовать для функции.
  2. Введите знак равенства ( = ), за которым следует имя функции с каким-либо параметром. Например, =DOUBLE(A1) . Далее нажмите ввод.
  3. Ячейка какое-то мгновение будет отбражать «Loading. «, а после этого выведет результат. The cell will momentarily display Loading. then return the result.

Руководство по пользовательским функицям

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

Выбор имени

В дополенние к стантартным соглашениям о выборе имени JavaScript функции, обратите внимание на следующее:

  • Имя пользовательской функции должно отличаться от имен встроенных функций, таких как SUM () .
  • Имя функции не может заканчиваться символом подчеркивания _ , который обозначает закрытую функцию в Apps Script.
  • Имя должно быть объявлено в синтаксисе функции function myFunction() , а не в выражении var myFunction = new Function() .
  • Использование прописных букв не имеет значения, в то время как в Таблицах функции традиционно используют написание все с заглавных.


Аргументы

Как и встроенные функции, пользовательские могут принимать аргументы в виде входящих значений:

  • Если вы обратитесь к функции с сылкой на одну ячейку в аргументе (как =DOUBLE(A1) ), аргумент будет содержать значение этой ячейки.
  • Если вы вызовете функцию с сылкой на диапазон ячеек в аргументе (как =DOUBLE(A1:B10) ), то аргумент будет содержать двумерный массив значений этих ячеек. Например, на изображении ниже аргумент в =DOUBLE(A1:B2) интерпретируется как double([[1,3],[2,4]]) . Обратите внимание, что пример DOUBLE , который приведен выше, должен быть изменен для работы с массивом.
  • Аргументы должны быть детерминированными. То есть, встроенные функции, который каждый раз возвращают разный результат — такие как NOW() или RAND() — не разрешено использовать в качестве аргументов пользовательских функций. Если пользовательская функция пытается вернуть значение, основанное на одной из этих непостоянных встроенных функций, она будет отображать Loading . до бесконечности.

Возвращаемые значения

Каждая пользовательская функция должна возвращать значение для отображения:

  • Если функция возвращает одно значение, то оно отображается в ячейке, в которой была вызвана функция.
  • Если пользовательская функция возвращает двумерный массив значений, значения будут заполнять соседние клетки вправо и вниз до тех пор, как эти клетки остаются пустыми. Если же заполнение приведет к перезаписи существующих значений в соседних ячейках, пользовательская функция выдаст ошибку. Для примера, смотрите раздел по оптимизации пользовательских функций.
  • Пользовательская функция не может повлиять на другие, чем на те, в которые она возвращает значение, ячейки. Другими словами, пользовательская функция не может редактировать произвольные диапазоны, а только те, из которых она вызывается и соседние. Чтобы редактировать произвольные ячееки, рекомендуется использовать пользовательское меню для запуска функции.
  • Вызов пользовательской функции должн вернуть значение в течение 30 секунд. Если этого не произошло, то ячейка будет отображать сообщение об ошибке: «Внутренняя ошибка при выполнении пользовательской функции».

Типы данных

Google Таблица хранит данные в различных форматах, в зависимости от характера данных. Когда эти значения используются в пользовательских функциях, Apps Script обрабатывает их как соответствующий тип данных в JavaScript. Это наиболее распространенная путаница:

  • Времена и даты в Таблицах становится объектом Date в Apps Script. Если Таблица и сценарий используют различные часовые пояса (редкая проблема), пользовательская функция должна самостоятельно это компенсировать.
  • Значения Длительность в Таблицах также становятся объектами Date, но работа с ними может быть сложной.
  • Значения в процентах в Таблице становятся десятичными числами в Apps Script. Например, ячейка со значением 10% будет в Apps Script 0,1 .

Автозавершение

Google Таблицы поддерживают автозавершение, так же как и встроенные функции. При вводе имени функции в ячейке, вы увидите список встроенных и пользовательских функций, соответствующий тому, что вы вводите. Пользовательские функции будут появляться в этом списке, если их сценарий включает в себя JSDoc-тег @customfunction , как в DOUBLE() приведенном ниже.

Дополнительно

Использование Apps Script сервисов

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

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

Supported services Notes
Cache Работает, но не особенно полезно в пользовательских функциях
HTML Может генерировать HTML, но не может отобразить его (используется редко)
JDBC
Language
Lock Работает, но не особенно полезно в пользовательских функциях
Maps Можно рассчитать направления, но не отображать карты
Properties
Spreadsheet Только для чтения (можно использовать большинство get\*() методов, но не set\*() .
Нельзя открыть другие Таблицы ( SpreadsheetApp.openById() или SpreadsheetApp.openByUrl() )
URL Fetch
Utilities
XML .

Если ваша пользовательская функция выбрасывает сообщение об ошибке «У вас нет разрешения на вызов X службы.» , значит служба требует авторизации пользователя и, таким образом, не может быть использована.

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

Общий доступ

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

  • Выберите в меню Инструменты > Редактор сценариев, чтобы открыть редактор сценариев, а затем скопировать текст сценария из исходной Таблицы и вставить его в редактор сценариев другой Таблицы.
  • Сделайте копию Таблицы, которая содержит пользовательскую функцию, выбрав в меню Файл > Создать копию. Когда Таблица копируется, любые скрипты, прикрепленные к ней копируются также. Любой, кто имеет доступ к Таблице может скопировать сценарий. (Соавторы, которые имеют доступ только на просмотр не могут открыть редактор скриптов в исходной Таблице. Тем не менее, когда они делают копию, они становятся владельцем копии и могут видеть скрипт).
  • Опубликуйте скрипт как дополнение к Google Таблицам.

Оптимизация

Каждый раз, когда пользовательская функция используется в Google Таблице, она делает отдельный вызов к серверу Apps Script. Если ваша таблица содержит десятки (или сотни, тысячи!) пользовательских вызовов, этот процесс может быть довольно медленным.

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

Например, функция DOUBLE() показаная выше, может быть переписана, чтобы принимать одну ячейку или диапазон ячеек следующим образом:

Описанный выше подход использует метод map объекта Array из JavaScript, чтобы рекурсивно вызвать DOUBLE() для каждого значения в двумерном массиве ячеек. Она возвращает двумерный массив, содержащий результаты. Таким образом, вы можете вызвать DOUBLE только один раз, но вычислить его для большого числа клеток сразу же, как показано на рисунке ниже. (Вы можете сделать то же самое с вложенными if вместо вызова map ).

Аналогичным образом, пользовательская функция ниже эффективно извлекает содержимого из Интернета и использует двумерный массив для отображения двух столбцов результатов с помощью всего одного вызова. Если каждая ячейка требует свой собственный вызов функции, операция займет значительно больше времени, так как сервер Apps Script будет загружать и разбирать XML каждый раз.

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

Google Apps script публикация аддона для внутреннего использования

Возможно ли опубликовать надстройку без одобрения Google, если она будет использоваться только для моего внутреннего использования?

Если нет, есть ли возможность сделать некоторые из проектов Google Apps Script глобальными. Так что мне не нужно будет копировать один и тот же код/​​функциональность в другие электронные таблицы или документы, чтобы снова использовать мои настраиваемые макросы.

Надстройку можно опубликовать, чтобы она была ограничена учетной записью домена /G Suite, в которой находится файл скрипта Apps.

Если дополнение не публикуется публично, оно не проходит процесс утверждения.

Надстройки должны быть опубликованы в G Suite Marketplace, а это значит, что вам нужно создать «стандартный» Google Cloud Project, связать его с вашим проектом Apps Script, а затем включить G Suite Marketplace SDK и настроить параметры в G. Suite Marketplace SDK.

Чтобы перейти на панель инструментов Google Cloud Platform, используйте URL

  • От «IAM и Admin» перейдите к «Управление ресурсами»
  • Если у вас нет названия организации, то создайте организацию
  • Создать новый проект GCP
  • Получить номер проекта GCP
  • Поместите номер проекта GCP в проект скрипта приложений
  • Перейдите к панели инструментов API и служб.
  • Убедитесь, что проект, который вы хотите использовать, указан в раскрывающемся списке.
  • Нажмите «Включить API и сервисы»
  • Поиск торговой площадки G Suite
  • Включить G Suite Marketplace SDK
  • Настройте G Suite Marketplace SDK

Существует также возможность сделать файл проекта скрипта приложения доступным для других проектов скрипта приложения в виде «библиотеки». Библиотеку можно сделать доступной для других проектов скриптов приложений, указав «ключ проекта» исходного скрипта приложений (библиотеки).

Тот, кто хочет использовать исходный файл скрипта Apps в качестве библиотеки, нуждается в ключе проекта. Чтобы найти ключ проекта, в редакторе кода выберите «Файл» — «Свойства проекта» и найдите «Ключ проекта (устарел)»

Чтобы добавить файл скрипта приложения в качестве библиотеки, в редакторе кода выберите «Ресурсы» — «Библиотеки». Вам не нужно ничего делать, чтобы создать библиотеку. Каждый проект Apps Script доступен в виде библиотеки. Все, что вам нужно сделать, это поделиться ключом проекта.

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

Если файл Apps Script не публикуется как надстройка, то нет смысла создавать меню надстроек, так как вы можете создать собственное меню.

Автоматизируем Google Документы на Google Apps Script

Dev Автоматизируем Google Документы на Google Apps Script

3 примера кода, которые стоит сохранить на будущее.

Продолжаем рассказывать о приемах автоматизации работы с сервисами Google. Многие думают о Google Docs, как о приложении предназначенном для просмотра таблиц, присланных по почте. Но это не так. У этого табличного процессора есть больше сотни встроенных формул для расчетов, обширный набор инструментов для форматирования и обработки данных.

Одно из важных достоинств Google Docs, не считая коллективной работы над документом из всех уголков планеты — возможность использовать Google Apps Script для автоматизации и интеграции с другими сервисами Google.

Попробовать рецепты из статьи очень просто:

  • Заходим на docs.google.com и авторизируемся;
  • Создаем новую электронную таблицу;
  • Открываем Инструменты ->Редактор скриптов;
  • Вбиваем в окошко код из примеров и вносим свои правки;
  • Нажимаем на кнопку Запустить и даем скрипту все разрешения, которые он попросит.

    Предположим, нам нужно составить отчет о тратах на коммунальные услуги в течение трех лет. У нас есть стопка квитанций и данные из них мы хотим занести в электронные таблицы на Google Sheet. Для каждого года нужно создать отдельный файл с 12 листами-месяцами. На каждом листе сделать шаблон для записи значений и добавить немного дизайна. А когда все данные будут внесены, построить график для их визуализации.

    Такая структура документа не слишком удобна для хранения данных, но рассмотрение этой задачи поможет понять, каким образом Google Apps Script взаимодействует с электронными таблицами.

    Генерация документов

    Создадим документы «Коммунальные счета 2012», «Коммунальные счета 2013» и «Коммунальные счета 2014». В каждом документе сделаем листы с названиями месяцев, на каждом листе в первом столбце запишем виды коммунальных услуг.

    function createTables() <
    years=[«2012″,»2013″,»2014»];
    months = [«Январь», «Февраль», «Март», «Апрель», «Май», «Июнь», «Июль», «Август», «Сентябрь», «Октябрь», «Ноябрь», «Декабрь»];
    services = [«Газ», «Свет», «Вода», «Квартплата», «Телефон», «Интернет», «Охрана»];
    for (j=0;j 4 лайфхака Gmail и Google Apps Script Google Apps Script для Docs в примерах Планируем жизнь с Google Calendar и Google Apps Script Простые автоматизации для Google Drive

    Написание скриптов для Google Apps

    Открытие JDBC-соединения

    На своей недавней конференции I/O Google представила ряд новых обновлений к набору сценариев для Google Apps, который позволяет создавать макросы, весьма похожие на те, что служат для расширения приложений Microsoft Office. В случае Google, однако, эти скрипты выполняются на сервере (т. е. на серверах Google) и используют JavaScript (на стороне сервера).

    Когда примерно год назад сценарии для Google Apps были представлены впервые, они был доступны только премиум-членам сообщества разработчиков. Затем в январе Google открыл доступ к большинству функций для обычных клиентов. Сюда вошли классы для доступа к списку контактов и папкам и классы для манипулирования электронными таблицами вплоть до уровня ячеек (т. е. аналогично тому, что вы имеете в соответствующем приложении для ПК).

    Затем в мае Google добавил ряд обновлений: поддержку интеграции с базой данных через JDBC (Java Database Connectivity), специальный пользовательский интерфейс (зарезервированный для платной Premier-версии Apps), автономный запуск скриптов (позволяющий запускать их с других веб-сайтов помимо Google), дополнительную интеграцию в свойства Google, такие как список Documents и Google Maps, и устанавливаемые обработчики событий.

    На текущий момент система создания скриптов доступна главным образом из приложения электронных таблиц, хотя она интегрирована и в другие приложения Google, в частности в системы электронной почты и карты. В систему скриптов включен “насыщенный” API с объектами, которые позволяют вам автоматизировать почти любое задание, какое только можно представить.

    Google опубликовал также примеры: один позволяет имитировать стратегию продажи акций в приложении электронных таблиц, другой генерирует фракталы, а еще один представляет собой полную систему записи учебного курса. (Этот третий кажется здесь лишним. Я не могу представить, чтобы кто-то стал использовать онлайн-программу электронных таблиц в качестве системы записи курса, однако это демонстрирует широту спектра того, что можно делать.)

    Лично я всё еще отношусь к этим новшествам немного скептически. Конечно, здесь есть некоторые полезные вещи, но я не уверен, насколько популярной будет такая система скриптов. Что касается JDBC, то это здорово: вы сможете создавать вполне приличные приложения поверх системы электронных таблиц.

    Подобная функциональность существовала в Microsoft Excel уже давно, но многие ли реально создавали приложения в Excel по сравнению с огромным количеством тех, кто просто использует эту программу и ее базовые функции? Возможно, всё изменится и система скриптов для Google Apps действительно имеет ряд интересных функций. Остается лишь посмотреть, станет ли она популярной.

    Интеграция через JDBC

    Если вы знакомы с JDBC из мира Java, то почувствуете себя как дома с интеграцией через JDBC. Набор классов меньше, чем официальный Sun JDBC API, работающий под Java (я имею здесь в виду JavaScript, а не Java; это совсем разные вещи), но базовая функциональность обеспечена через классы для поддержки соединений, операторов, подготовленных операторов и результирующих множеств.

    Документация по API скудновата: она содержит прототипы функций и краткие описания, но никаких примеров. Скажем, я хотел увидеть какой-либо реальный SQL в классе JdbcStatement, но там ничего не было. Я надеюсь, что появится более подробная документация в будущем, а также больше примеров от сообщества.

    Система скриптов это по сути упаковщик JavaScript для набора Java-классов на сервере. Почему я так решил? Потому что при тестировании я часто получал сообщения об ошибках, которые явно приходили от Java. Один раз я попытался превратить массив JavaScript в функцию и получил сообщение об ошибке: “Cannot convert NativeArray@78037b60 to java.lang.Object[][]”.)

    Далее, JavaScript-классы, с которыми вы взаимодействуете, похоже, имеют множество методов, которые не документированы в API. Это нормально, если учесть, что в JavaScript почти нет механизма для общедоступных и индивидуальных членов класса. Есть способы скрывать члены, тем самым делая их индивидуальными, но сама спецификация не поддерживает уровни доступа.

    Однако это означает, что вы имеете уйму функций, которые легко можете вызывать (хотя следует быть осторожным, если они не документированы, поскольку Google может легко изменить их в любой момент). Откуда я узнал это? Увидел, что редактор скриптов знает объекты и показывает список членов, доступных для объекта, как только вы напечатаете имя объекта с точкой.

    Конечно, JavaScript не силён в типах: вы просто объявляете переменные с помощью var, и они могут быть любого типа. Это означает, что редактор кода выполняет довольно сложную работу, чтобы проследить цепочку вызовов. Например, если вы напечатаете

    var ss = SpreadsheetApp.getActiveSpreadsheet();

    то редактор знает, что метод getActiveSpreadsheet возвращает объект Spreadsheet, или, более точно для пуристов JavaScript, объект, который содержит члены, определяющие его как объект Spreadsheet.

    Код соединения

    Исполнение кода было несколько медленным; потребовалось где-то 4 с для соединения, и затем можно было воочию видеть заполнение строки, потом крошечную паузу, потом заполнение следующей строки и т. д. Сравните это с удаленным соединением через интерфейс командной строки mysql (с моего локального компьютера с тем же удаленным сервером mysql), который соединился мгновенно и извлекал строки чуть быстрее.

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

    В официальном блоге сказано: “Теперь есть возможность вызывать скрипт с любого веб-сайта, так что вы можете создавать веб-страницы, где пользователи смогут вводить данные, которые будут собираться в электронную таблицу Google”. К сожалению, это почти вся информация, какую мы имеем на текущий момент. В документации пока ничего нет об этой функции, но звучит многообещающе.

    Мне представляется, что будет добавлена библиотека JavaScript, которую вы включите на своем веб-сайте, чтобы получать доступ к скриптам, почти так же, как вы можете включать скрипты Facebook на собственном сайте. Остается подождать и посмотреть. Вопросы приватности и безопасности также вызывают интерес.

    Скрипты Google Apps могут выполняться из отдельных приложений, например электронных таблиц Google, и обращаться к данным, хранимым в других приложениях Google

    Открытие JDBC-соединения

    Поскольку документация была скудновата, мне пришлось самому разбираться, как заставить JDBC-соединение работать. Но когда я в этом разобрался, то всё заработало очень хорошо. Для читающих это программистов привожу краткий фрагмент кода, который открывает JDBC-соединение, выполняет некий SQL-запрос и копирует полученные данные в активную электронную таблицу:

    Мастер Йода рекомендует:  Как стать программистом руководство от Google
  • Добавить комментарий