Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю





Доброго часу доби, дорогі читачі, вредіна, лиходії, доброзичливці та інші особистості. Минув період страшних страждань, починаючи від сервера проекту, Мосенерго, clip2net-а і закінчуючи іншими проблемами, що напали на нас за останній тиждень. До речі, це все показало, що багато хто не зовсім знайомі з нашим твіттером, форумом, новинним порталом, групою в контакті, фейсбуці і т.п., через що ми монотонно відповідали весь цей час на Ваші листи, смс і навіть дзвінки.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Наприкінці цієї епопеї ми хочемо підняти кілька специфічну тему, яка далеко не для всіх буде зрозуміла, цікава і звична, а так само швидше повинна була вийти на sonikelf.su, але з цими, визнаю, обіцяними, проектами у нас поки біда і матеріал цей, як бачите, виходить тут. Втім, сподіваюся, це не зашкодить нікому з читаючих.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністюЯ думаю, що дуже багато хто з Вас вміють користуватися Excel’ем або його аналогом, а деякі, може, навіть і гугловських таблицями, про які писали тут. Ті, хто користується диском Google (Google Drive), напевно вже використали Таблиці (Spreadsheets) і помітили, що по функціоналу вони трохи поступаються Ексель, але тим не менше це все ще потужний інструмент. Так от, в Ексель були макроси (отакі команди, що спрощують і автоматизують обчислення), написані на відомому мовою VBA (Visual Basic for Applications). В Таблицях Google також є макроси, які іменуються скриптами і пишуться вже на мові Javascript. З ними ми сьогодні і познайомимося.

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

Зберіться в грудочку мозку .. І приступимо Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Створення таблиці Google Drive і наповнення її контентом

Розглянемо таку простеньку задачку:

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

Якщо Ви забули як взагалі користуватися документами Google, то ласкаво просимо почитати відповідну і вже згадану вище статтю. Якщо Вам це не потрібно зовсім, то читати напевно і далі навіть немає сенсу. Хоча, звичайно, кому що Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Так от, створюємо нову таблицю Google, іменуємо її, наприклад, «Фрукти«. Ну, як, наприклад .. Враховуючи, що приклад про фрукти, то .. Ну Ви зрозуміли Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Тепер додаємо на перший лист наші фрукти та кольору:

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Примітка! Для того, щоб вважалися фрукти, введіть у комірку А1 формулу:

= »Фрукт («&COUNTA (A2: A)&»)»

Тепер створимо макрос. Для цього йдемо в меню «Інструменти» і вибираємо «Управління скриптами«. З’явиться спливаюче меню, де ми тиснемо на кнопку «Створити«.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

У віконці вибираємо «Порожній проект«.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Відкриється редактор, який на перший погляд (та й на другий) може викликати ступор.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Власне, що далі? А далі ми починаємо писати наш власний макрос ручками (так, все самостійно). Як виглядатиме наш макрос? Потрібно скласти схемку сього процесу (інакше цей процес займе у Вас дуже багато часу).

Нам потрібно:

Дістати значення кольорів з другої колонки;

Відповідно до цими значеннями задавати кольори для першої колонки.

Отже .. Начебто все просто .. Якщо знати, як це робити, звичайно Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

шКоддінг

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

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; ilt; 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] [0]) {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 додає меню «Скрипти» до таблиці при відкритті оной. І виглядає це справа так:

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Тепер за кодом:

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; ilt; 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] [0]) {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 Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Загалом-то на цьому все. Але можна зробити невелике доповнення, щоб не доводилося щоразу запускати функції вручну. Для цього зайдіть в редакторі скриптів в меню «Ресурси» і виберіть там «Тригери поточного проекту«. Відкриється менюшка, в якій вже буде наша функція onLoad. Додаємо нову функцію (1) і задаємо назву функції (2) і тип активації оной (3). Також можна натиснути на «Повідомлення» і додати / прибрати свою поштову адресу зі списку повідомлень. Вони будуть приходити в разі, якщо скрипт виконувався з помилками.

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Кінцевий результат дійства:

Google Docs, Google Drive, Google Scripts і все таке інше. Шаманов з технічної реальністю

Ну, загалом .. Так.

Післямова

Вітаю з першим скриптом. Це лише мала частка того, що можна зробити за допомогою такого потужного пристрої, як Google Scripts. Зрозуміло, що напевно більшість читачів така штука лякає, тим більше, що інші статті не так суворі і «лаються» на Вас кодом, та й іншими жахами життя .. Але що вже робити.

Як і завжди, будемо раді питань і всьому такому іншого в коментарях.

P.S. За існування оной статті окреме спасибі одному проекту та члену нашої команди під ніком «6aPHaK».