понедельник, 7 мая 2012 г.

Пишем скрипты в Google Spreadsheet

В далёких 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"}]);

и получаем:

19 комментариев:

  1. Познавательно,спасибо

    ОтветитьУдалить
  2. Здравствуйте!

    Подскажите, Вы делаете проекты под-заказ?
    Нас интересует перенос программы по расчету изделия из excel в google таблицы.
    karpov@mail.ru

    ОтветитьУдалить
  3. Можно ли назначить скрипту к горячие клавиши?

    ОтветитьУдалить
  4. А скажите, как сделать такую фичу:
    Нужен скрипт для Google docs, который при изменении каждой ячейки сохраняет предыдущую информацию, новую добавляет перед старой, в квадратных скобках пишет : дата, время, пользователь. В конце «;». И так каждый раз. Исключение 1я строка – название столбцов
    Пример:
    - добавили фразу «заявка принята» получилось:
    «заявка принята [26.03.14 14:58 GoodAvto@gmail.com];»
    -добавили «одобрено», получилось:
    «одобрено [26.03.14 14:59 GoodAvto@gmail.com]; заявка принята [26.03.14 14:58 GoodAvto@gmail.com];»

    ОтветитьУдалить
  5. Добрый день Необходима оплачиваемая помощь. Скажите, мы ведем crm в spreadsheet'e. Есть столбцы с e-mail клиента. Необходимо следующее: я ввожу в строчку - e-mail клиента. Появляется кнопка отправить "заранее созданное письмо". Письмо отправляется. Показывается статус отправки- доставлено или нет. Спасибо за ответ на почту - mesol@tut.by

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Добрый день!
    Есть заказ на прайс-калькулятор.
    Пишите slavakopaev@gmail.com, обсудим.

    ОтветитьУдалить
  8. Здраствуйте, подскажите. Такая проблемка в гугл докс, надо:
    1. Скрыть от определенного редактора столбец с номерами телефонов оставив только последние 4 цифры. Причем не было возможности скопировать информацию из столбца ctrl + с. Для остальных редакторов этот столбец оставался всегда видимым и редактируемым. (p.s. основное наполнение таблицы идет через форму с сайта).
    2. Сделать черный список клиентов на втором листе и при заполнении первого листа с помощью формы или вручную столбец с номерами телефонов сравнивался с черным списком из столбца листа2 И автоматически выделялся в листе 1 черным цветом с белым шрифтом.
    Сколько это стоит пишите: ivanosovsky@yandex.ru
    Заранее благодарен.

    ОтветитьУдалить
  9. Добрый день!
    Имеется оплачиваемый периодический поток однотипных задач
    по написанию формул и скриптов в среде Google Spreadsheet.
    Пишите: vinactiv@gmail.com
    Михаил

    ОтветитьУдалить
  10. есть необходимость в нескольких скриптах для автоматизации работы в гугл-таблицах, напишите пожалуйста на kokorobova@gmail.com

    ОтветитьУдалить
  11. Этот комментарий был удален автором.

    ОтветитьУдалить
  12. Здравствуйте!

    Задача: Создать в Гугл Док смеху зала с местами и связать её с таблице рядом. Чтобы при написании слова "Бронь" в таблице в графе "Статус" на схеме это место выделялось желтым. Как?

    ОтветитьУдалить
  13. Этот комментарий был удален автором.

    ОтветитьУдалить
  14. Unknown пишите paulpetrow@gmail.com есть идее по реализации
    смеху зала с местами и связать её с таблице рядом.

    ОтветитьУдалить
  15. Водная статья о том с чего начать изучение скриптов google.
    Документация по Google Apps Script.

    Ссылка на статью: G-Apps-Script.COM/google-apps-script

    Сайт: G-Apps-Script.COM

    Ярлыки:
    #gas #GoogleAppsScript #GAppsCcript #GoogleСкрипты #GoogleСценарии

    ОтветитьУдалить
  16. Этот пользователь был удален автором.10 апреля 2019 г. в 07:14

    Этот комментарий был удален автором.

    ОтветитьУдалить
  17. Добрый день! Возможно ли в гугл таблицах увеличивать вставленную картинку по клику мышкой? Кто знает как напишите на почту, пожалуйста

    ОтветитьУдалить