ОБНОВЛЕНИЕ: Вышла часть 2!
ОБНОВЛЕНИЕ 2: Вышла и часть 3!
ОБНОВЛЕНИЕ 3: Расширение Chrome Recruiter Codes — сказка LinkedIn

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

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

Немного предыстории (можно пропустить)

У меня есть далекий, небольшой опыт программирования-самоучки, насчитывающий почти 25 лет, во времена, когда не было stackoverflow.com, но в Windows появлялось много ошибок переполнения стека… Сначала я выучил Basic в детстве , на уже древнем Commodore 64 и по совету двоюродного брата, изучавшего программную инженерию, перешел сразу на C++, чтобы писать настольные приложения для давно ушедшей (но прекрасной) операционной системы под названием BeOS, которая была так хороша, что была переделана фанатами с нуля в ОС с открытым исходным кодом под названием Haiku.

Когда моя любимая платформа умерла, мне было 15, и хотя мне удалось разработать пару более-менее полезных приложений, помимо личных веб-сайтов, с использованием новых на тот момент технологий, таких как XHTML 1.0 (HTML 4 + XML), SSI и CSS2, я решил навсегда бросить программирование, думая, что все равно хочу работать в другом секторе. Многие говорили мне, что я был дураком, растрачивая то, чему я научился, и не продолжать дальше, но с высоты моей подростковой мудрости я думал, что знаю лучше… Очевидно, я не знал, но выбор был сделан, и я решил чтобы изучать науки о Земле (геологию) в университете и больше никогда не писал код в течение 20 лет.

У судьбы было чувство юмора, и я никогда не работал в геологии, моя первая офисная работа была уже ближе к IT, а каждая последующая работа все ближе и ближе к ней. Кажется, это была судьба!

Так я попал в FusionWorks — IT-компанию с 11-летней историей и 57 клиентами в 18 странах. Вот я гикрейтер — не уверен, потому что меня считают гиком или мне нужно набирать гиков — мне не говорят.

Учитесь во время работы: JS, HTML, CSS, все в Google Apps Script

За последние пару лет тесного сотрудничества с веб-разработчиками я часто задавался вопросом, что нужно для изучения JavaScript. Я все еще помнил основы HTML и CSS из подросткового возраста, но по какой-то причине JavaScript казался мне пугающим шагом. Может быть, это было потому, что я знал, насколько востребованы разработчики JavaScript на рынке труда, или потому, что, когда я смотрел на это, я чувствовал, что это затрагивает слишком много элементов, которых я не знал, и что это заняло бы меня. слишком много времени и усилий, чтобы учиться.

Но когда я начал использовать Google Apps Script из Google Sheets, сначала используя ресурсы замечательного веб-сайта Spreadsheet Dev, я понял, что JavaScript стал для меня довольно естественным, если он использовался для управления тем, что я использовал каждый день в Google. Листы. Объем того, что вы можете сделать, поначалу невелик, но чем больше вы продвигаетесь, тем больше вы изучаете JavaScript и даже можете добавить в смесь HTML и CSS, если вы хотите создавать собственные пользовательские интерфейсы.
В первые часы моего волнения я шел в этом направлении, и я кратко расскажу об этом здесь, хотя позже я отказался от этого пути, потому что обнаружил, что более эффективно избавляться от пользовательского интерфейса, а не добавлять его.

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

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

Пользовательские кнопки для выполнения простых операций (с возможностью безопасного пропуска)

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

Чтобы начать писать свои скрипты, вы переходите к «Apps Script» в меню «Extensions»:

Если вы никогда не использовали его раньше, вы окажетесь на странице, подобной этой:

Или, если, как и я, вы впервые начали возиться с макросами, думая, что это может быть проще (это не так), это может называться «Записанные макросы (имя вашего листа)». Ниже приведена первая функция, которую я написал, которая сэкономила мне несколько кликов, когда мне нужно было добавить 1 к значению, когда я считал вещи вручную…

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

Во-первых, давайте сделаем код более наглядным с помощью Gist (я только что погуглил):

Что это делает, описано в первой строке комментария, и я также собирался написать построчное объяснение для тех из вас, кто является новичком, как я, когда писал это, но эта статья станет очень длинной, так что не стесняйтесь спрашивать подробности в комментариях, и я буду рад обсудить это.

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

Написав это и сохранив его, вы можете протестировать его, связав его с кнопкой, которая, как уже упоминалось, создана из рисунка:

Который может даже содержать просто большой смайлик внутри текстового поля, чтобы сделать его быстрым:

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

Вот и все, маленький шаг для кодера, но большой шаг для нуба!

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

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

Этот учит чему-то нетривиальному: массивам и тому, как они работают, плюс работе с датами.

(Вы можете пропустить это, если понимаете, как это работает.)

  • Мы создаем массив с «Const Days = ['B', 'C', 'D', 'E', 'F']».
    Если вы новичок, вы можете думать об этом как о упорядоченный список, где эти буквы всегда будут в указанном порядке и будут доступны по их положению, причем первая из них будет иметь номер позиции 0.
    Например, Days[1] будет ссылаться на 'C', а Days[ 0] до «В».
  • Обратите внимание, что они предназначены для обозначения ячеек, которые в так называемой нотации A1 описываются буквой для столбца и числом для строки. Столбцы в этих случаях относятся к дням недели, где B — это понедельник, а F — пятница (случайно).
    Итак, как сообщить сценарию, куда писать, исходя из того, какой сегодня день?
  • Играя с индексом массива и функцией getDay(), которая выдает число в зависимости от дня, от 0 для воскресенья до 6 для субботы.
    Следовательно, если мы хотим, чтобы понедельник был связан с буквой B из массива Дни выше, все, что нам нужно сделать, это вычесть 1 из значения getDay(): как в строке const Day = Days[Today.getDay()-1];
  • Следующая строка получит Диапазон (группу ячеек, в данном случае только одну ячейку), связав букву, которую мы сохранили как «День», с номером нужной нам строки (в моем случае это было 50), используя простой способ, который JavaScript дает для построения строки из переменных, объединяя их в цепочку со знаком +, как в «getRange(Day+50)».
    Таким образом, это будет B50 для понедельника, C50 для вторника и т. д.

Хватит с основ, что насчет полезных вещей?

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

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

Писать об этом можно было бы довольно много, но вкратце можно увидеть следующие интересные моменты:

  • Вы можете использовать листы для хранения настроек, которые вы используете для обработки других листов! Это намного проще, чем использование баз данных, и с некоторой настройкой это позволяет вам изменить то, что делает скрипт, больше не касаясь его кода.
  • Если вы организуете свой лист с некоторыми значениями по умолчанию, которые всегда начинаются одинаково, как в этом случае мои «статусы», начинающиеся с цифр или букв, вы можете легко и быстро проверить их значения, взглянув только на первый символ значения ячейки. , а не всю ячейку.
  • Использование метода массивов push() отлично подходит для подсчета элементов и одновременного сохранения их в списках.
  • Используя массивы вместо отдельных переменных для таких понятий, как контакты, которые являются новыми, с которыми нужно связаться (TBC в сценарии) и с которыми связались, я могу процедурно просмотреть их, циклически просматривая их индекс.
    Это делает код труднее читать, но если вы правильно прокомментируете его, вы сможете получить лучшее из обоих миров: скорость и краткость процедурного выполнения действий во вложенных циклах и код, который можно легко объяснить.

Все это можно использовать для генерации статистики как в виде всплывающих сообщений, так и полноценных листов:

Здесь я использую тот же двумерный массив для создания отчета, который просто отображается на экране с помощью функции alert() и копируется на лист, поскольку функция setValues() принимает двумерный массив.

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

В пустой день, такой как это воскресенье, это генерирует все 0, но вот результат для вас, чтобы получить представление:

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

Это не красиво, потому что я скрываю это и генерирую из другого скрипта и другого документа: таким образом вы можете заставить свои листы разговаривать друг с другом!

Но как насчет HTML и CSS? Где интерфейс?

Ну, в какой-то момент я сделал что-то вроде этого:

Это HTML с простым CSS, он взаимодействует с Google Apps Script и выполняется из того же интерфейса Google Apps Script.

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

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

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

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

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

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

В любом случае, покажется ли вам это тривиальным или сложным, я настоятельно рекомендую начать пробовать этот материал самостоятельно: он меня многому научил, повысил мою продуктивность и даже улучшил мое логическое мышление в целом!

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

До следующего раза, удачного кодирования!

P.S.: Немного отличается от того, что я предвещал, вот вторая часть этой серии!

Проверьте продолжение! Расширение Chrome Recruiter Codes — сказка LinkedIn!