К основному контенту

Сообщения

Сообщения за 2018

Пользовательское меню в Документах, Таблицах и Формах

Google Apps Script умеет создавать меню, содержание которого определяет разработчик. Меню может быть создано для приложений Таблиц, Документы или Формы (режим редактирования). Отличительной особенностью является то, что нельзя передать параметры в вызываемую через меню функцию. Принцип построения меню будет всегда одинаковый: Необходимо получить экземпляр среды пользовательского интерфейса Ui, позволяющий скрипту добавлять такие функции, как меню, диалоговые окна, боковые панели. Создать объект меню createMenu(). Наполнить меню возможными элементами: пунктами меню addItem(), подменю addSubMenu(), разделителями addSeparator(). Добавить меню в интерфейс, вызвав метод addToUi() Для того, чтобы меню появлялось сразу после открытия файла, необходимо добавить функцию создания меню в простой триггер onOpen(). 1. Пример простого приложения для Формы Создает пользовательское меню Содержимое меню Добавление текстового поля Отчет о Форме 2. Пример простого приложения д

Особенности копирования формул

Варианты копирования формул Существует 4 основных способа копирования формул при помощи Google Apps Script: Комбинирование методов  getFormulas()/setFormulas() Использование универсального метода  copyTo() Комбинирование методов  getFormulaR1C1()/setFormulaR1C1() Опосредованное применение комбинирования методов  getFormulas()/setValues() Все эти способы вытекают из возможностей использования методов класса Range . Примеры Положим, что существует ситуация, в которой необходимо программно скопировать формулы в Таблице Гугл. Например, Из ячейки F3 необходимо сопировать формулу в F4 . В данном месте стоит обговорить некоторые детали. Первый, третий и четвертый способы очень похожи. Опосредованность четвертого заключается в том, что при вставке данных Таблица автоматически определяет контент как формулу и превращает ее в таковую. Этот способ полезен тогда, когда необходимо заполнить Таблиц

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

Некоторые пользователи предпочитают, чтобы форматирование присутствовало на всех листах. При отправке Формы в Таблицу добавляется новая строка, и она не заимствует никакого форматирования. Справиться с этой проблемой может устанавливаемый на событие onFormSubmit скрипт следующего содержания: /** * * @param {GoogleAppsScript.Events.SheetsOnFormSubmit} e */ function onformsubmit(e) { const sheet = e.range.getSheet(); sheet .getRange('1:1') .copyTo(sheet.getRange(`${e.range.getRow()}:${e.range.getRow()}`), { formatOnly: true, }); } Посмотреть как это работает можно тут: Форма Таблица Не забудьте зарегистрировать функцию onformsubmit для события On Form submit Что происходит: Событие вызывает  onformsubmit Получаем текущий лист Берем диапазон "1:1" листа Копируем только форматирование в диапазон, который изменился благодаря форме 3й пункт можно поправить под текущие требования, например, это может быть вторая строка '2

Как создать чекбокс программно

Пока не удалось в оригинальном билдере SpreadsheetApp найти конструктор для галочек Logger.log(JSON.stringify( Object.keys(SpreadsheetApp.newDataValidation()).sort(), null, "  " )); Поэтому придется воспользоваться расширенной службой Google Sheets. Как включить эту ботву, можно прочитать в статье " Расширенные службы Google ". Суть: Создаем объект-ресурс, его заполняем запросами. Конструкция запроса на назначение валидации данных довольно проста:  Указываем диапазон Задаем правило и его параметры. Далее вызываем стандартный метод выполнения пакета запросов из ресурса.

Google Apps Script против JavaScript

Общие данные Google Apps Script основаны на JavaScript 1.6 , плюс несколько функций от 1.7 и 1.8 . Таким образом, многие базовые функции JavaScript доступны в дополнение к встроенным и расширенным службам Google ; вы можете использовать основные объекты, такие как Array , Date , RegExp и т.д. , а также глобальные объекты Math и Object . Однако, поскольку код Apps Script работает на серверах Google (а не на стороне клиента, за исключением страниц HTML-сервиса ), функции на основе браузера, такие как манипуляции с DOM или API windows, недоступны. Вообще принято называть скрипты диалектом JavaScript. Полифил Из вышесказанного следует, что к скриптам можно применить технику использования полифилов. Например, метод Math.trunc() (отбрасывает десятичную запятую и все цифры после неё, не обращая внимания на знак аргумента) поддерживается в более новых версиях JS и в GS его нет. Добавьте следующий файл в ваш проект и все будет ок В документации MDN часто встресаются полифилы с опи

Триггеры Google Apps Script

Все триггеры в скриптах делятся по виду события, типу установки и области применения. Области применения Таблицы Формы Документы Сайты Автономные скрипты  События Open - происходит при открытии файла в приложении Гугл. Например, Формы создают это событие только при открытии в режиме редактирвоания. Edit - происходит при завершении ввода данных в ячейку Таблицы пользователем. Только Таблицы. Только пользователем. Install - автоматически вызывается при установке дополнения. Change - возникает при других (не изменение данных ячейки, например, назначение цвета или ширины колонки) изменених Таблицы вызванных пользователем. Только Таблицы. Только пользователем. Form submit - исполнится только тогда, когда придет ответ от респондента Формы. Time-driven - отложенный триггер действия, срабатывающий по истечении времени Get - событие отрабатывающее get-запросы к веб-приложению Post - событие отрабатывающее post-запросы к веб-приложению Типы установок Simple trig

Копирование правил условного форматирования

Необходимо получить правило Далее через метод copy() получить ссылку на билдер Задать параметры билдера и собрать его Применить правила для нового диапазона Пример

Расширенные службы Google

Расширенные службы Google Расширенные службы в Apps Script позволяют опытным разработчикам подключаться к определенным общедоступным API Google через более простые надстройки, чем использовать HTTP-интерфейсы представленные в языке. Расширенные службы - это, по сути, тонкие обертки вокруг этих API Google. Они работают так же, как встроенные сервисы Apps Script , например, они предоставляют автозаполнение, а приложение Script Script автоматически обрабатывает поток авторизации . Однако вы должны включить расширенную службу в консоли разработчика , прежде чем спользовать ее в скрипте. Чтобы узнать, какие API-интерфейсы Google доступны в качестве расширенных служб, ознакомьтесь с разделом «Расширенные службы Google» справочника . Если вы хотите использовать Google API, который недоступен в качестве расширенной службы, просто подключитесь к нему, как и к любому другому внешнему API. Расширенные службы или HTTP? Каждая из расширенных служб Google связана с общедоступным API Goog

Обновление Формы при отправке

Формы Google не являются динамическими. Никакой связи с сервером они не держат, поэтому ничего "подтягивать" они не будут. Но иногда случаются задачи, которые могут быть решены с помощью возможности редактирвоания Формы. Триггер отправки Формы запускает цепочку изменений. Совсем как в дополнениии "Other Etc" . Пример Небольшое приложение, которое открывает Таблицу и читает значение диапазона по адресу Обработка триггера отправки Формы и изменение Формы Как это все работает? Создается проект скрипта в Форме или в Таблице . Регистрируется триггер отправки Формы для функции onFormSubmit . В данном примере это сделано в Форме. При срабатывании триггера , открывается Таблица, к которой привязана Форма и оттуда берется указанное в настройках значение. Для текущего примера это значение общей суммы всех чисел внесенных через Форму. Как только значение получено, обновляется описание Формы - выводится новая сумма для последующих респондентов. Loadin

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

Часто возникает задача удаления строк из Таблицы Google по какому-либо условию. Разнообразие условий так велико, что порой приходится создавать метод "удаления строк" снова и снова. Довольно утомительно. Для простых офсных скриптов можно применить сниппет, описанный ниже. Основная идея заключается в том, чтобы взять весь массив данных и перебрать его в обратном порядке. При переборе каждая строка передается в функцию обратного вызова, которая принимет решение удалить строку или нет. Для оптимизации количество последовательных строк суммируется, и для удаления применяется метод deleteRows(rowPosition, howMany) класса Sheet В примере ниже скрипт удаляет строки автивного листа, в которых ячейки из диапазона D27:D77 и F27:F77 попарно пустые

Как открыть ссылку с помощью Google Apps Script?

Часто возникает задача, в которой требуется по результатам работы скрипта открыть ссылку в новом окне/вкладке браузера. В Google Apps Script не существует методов взаимодействия с браузером. Единственная более-менее реальная связь между пользователем и сервером скрипта находится в интерфейсе реализуемой программы. Это может быть Таблица, Документ или Web приложение. Все они реализуются через HtmlService. Например, SpreadsheetApp.getUi().showModelessDialog(htmlOutput, "title"); Понятно, что в построенном htmlOutput , можно выполнить код для текущего window . Например, window.open(url, "_blank"); Идея обернутая кодом ниже по тексту. Пользователь выбирает ячейку в Таблице (или все, что угодно, что формирует ссылку). На сервере На клиенте строится окно диалога, открывается новая вкладка браузера и закрывается окно диалога, при успешном выполнении условия. Иначе появляется сообщение, что переданный параметр не ссылка. Этот метод имеет существенный недостаток

Геокодирование почтового адреса. Maps Service

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

Работа с Blogger API

Демонстрация возможностей работы с Blogger API Этот пост обновляется с помощью функции updatePost() Вообще, чтобы получить информацию о блоге, зная его ID, можно выполнить getBlog() Создать новый пост на основе текста из Документа createPost() Весь UrlFetchApp обернут в fetch

Определения и области применения триггеров событий Edit и Change

В этой статье рассмотрены два триггера событий Edit и Change . Определения Важное замечание. Оба события происходят только при прямых действиях пользователей в Таблицах. Т.о. действие триггера или дискретной функции не может сгенерировать после себя событие. Edit - событие широкого применения, которое происходит, когда изменяется значение диапазона Таблицы. Очень важно понять, что изменение касается только данных Таблицы и только в случае, если событие-инициатор произведено пользователем . Change - событие, которое возникает при изменении контента или структуры самой Таблицы . Например, изменение цвета, размера ячейки, удаление, создание или перемещение листа. Области применения Триггер события Edit используется как простой onEdit  и как устанавливаемый (регистрируемый) триггер. Это означает, что он может быть вызван как любым редактором, так и создателем триггера. Событие Change может быть связано только регистрируемым триггером. Аргументы Событие Edit передае

Неоднозначный перевод триггеров в русскоязычной локализации

Если скрипт привязан к Таблице, то в списке доступных триггеров проекта будут триггеры onEdit и onChange . Кто-то в Гугл постарался и локализовал их как Изменение и, как бы странно это не звучало, Изменение . Если вы приняли решение продолжать использовать эту локализацию, то вот подсказка для соответствия: первое Изменение - это onEdit , а второе - onChange . Пытаемся надавить на Google на треккере ошибок тут Ambiguous translation of the names of triggers into Russian путем нажатия на звездочку.

Как получить несколько выделенных диапазонов?

Чтобы получить список выделенных пользователем диапазонов, необходимо у активной Таблицы вызвать метод getActiveRangeList() . Он возвращает структуру RangeList() , которая может быть очищена одним из методов clean , или изменить содержание и форматирование через set -методы. Единственный get -метод getRanges() возвращает список (массив) выделенных пользователем диапазонов. Из особенностей можно отметить порядок возвращаемых данных. Т.к. массив в gs - упорядоченный обьект, то элементы в нем находятся в порядке выделения их пользователем. Результат работы программы, листинг которой будет приведен ниже: A1 A2 A3 A4 B4 B3 B2 B1 Приятная возможность задать пользователю дополнительный квест ;-) Далее приведена программа, которая выводит на экран модальное окно со списком выделенных пользователем диапазонов: