Автонавигация внутри гугл-таблиц

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

Описание проблемы

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

Например:

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

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

О том, как организовать эту систему навигации в гугл таблицах — и будет сегодняшняя статья.

Что в конечном итоге мы научимся делать

Для начала, покажу как это выглядит в моём проекте.

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

Автонавигация внутри гугл-таблиц

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

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

Так, если мы нажмём по любой из этих ссылок, то перейдём к её описанию. Для примера — кликнем по абилке «Лавина», и система нас перенаправит к месту, где описана эта единица контента:

Автонавигация внутри гугл-таблиц

Часть параметров здесь генерируется автоматически. Например, в столбцах P:T перечислены все юниты, у которых есть эта абилка. Можно кликнуть по любому из юнитов и перенестись к месту, где для него эти абилки определяются.

Начнём. Как получаются ссылки на ячейки в гугл-таблицах?

Чтобы получить ссылку на определённую ячейку внутри гуглтаблицы:

  1. нажмите правой кнопкой мыши по ячейке
  2. из контекстного меню выберите команду «Показать другие действия с ячейкой → Получить ссылку на эту ячейку»
Автонавигация внутри гугл-таблиц

Ссылка будет скопирована в буфер обмена

Автонавигация внутри гугл-таблиц

Ссылка на ячейку имеет следующий вид:

Автонавигация внутри гугл-таблиц

Зелёным цветом выделен идентификатор страницы 1397113246 (у каждой страницы в документе собственная id)

Красным цветом выделен адрес E15 нужной ячейки

Теперь эту ссылку можно использовать в качестве аргумента в функции «ГИПЕРССЫЛКА»

Функция ГИПЕРССЫЛКА()

Давайте для примера создадим эту функцию в любой части документа и укажем полученную ссылку в качестве аргумента.

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

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

Автонавигация внутри гугл-таблиц

И вот как будет выглядеть результат:

Автонавигация внутри гугл-таблиц

Теперь, когда мы научились пользоваться ГИПЕРССЫЛКОЙ — слегка усложним задачу и сделаем динамическую ссылку.

Давайте разобьём нашу ссылку на две составляющие:

  1. та часть ссылки, которая никогда не будет меняться. Назовём эту часть «преффикс ссылки». В нашем случае это почти вся часть ссылки, кроме последних цифр, которые указывают на номер строки, а именно «https://docs.google.com/spreadsheets/d/1xM5NRLRnPMPSclOBi0NBZiCtbGIhvLSE2HP21gDEL2s/edit#gid=1397113246&range=E»

И внесём эти значения в какие-нибудь ячейки для теста:

Автонавигация внутри гугл-таблиц

Теперь мы можем пользоваться этими данными, чтобы объединять их в общую строку. Для этого используется амперсант (символ &)

Так, если мы укажем где-нибудь формулу «=A2 & A4», то получим строку https://docs.google.com/spreadsheets/d/1xM5NRLRnPMPSclOBi0NBZiCtbGIhvLSE2HP21gDEL2s/edit#gid=1397113246&range=E15

то есть — получим результат объединения значений из указанных двух ячеек.

Давайте воспользуемся новыми полученными знаниями и создадим формулу гиперссылки с динамически меняющейся ссылкой. Выглядеть она будет так:

Автонавигация внутри гугл-таблиц

Отлично! Однако, результат может быть нечитаемым если формула ссылается не на соседние ячейки. То есть, если вы вернётесь к этой формуле спустя месяц, или если другой человек попытается разобраться какие берутся значения и для чего — ему будет сложно это сделать.

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

Давайте так эту ячейку и назовём «ПреффиксСсылки» (без пробела). Для этого выделите данную ячейку. После чего обратите внимание на так называемое «поле названия», что находится в верхнем левом углу экрана:

Автонавигация внутри гугл-таблиц

Сейчас в поле названия отображается адрес ячейки, так как для этой ячейки не дано уникальное название. Чтобы исправить это — прямо в этом поле введите «ПреффиксСсылки» и нажмите Enter для подтверждения. После этого Вы должны наблюдать следующий результат:

Автонавигация внутри гугл-таблиц

Название не вместилось полностью, и это нормально. Зато теперь данная ячейка имеет своё название, которым можно пользоваться в других формулах.

Давайте слегка перепишем формулу, как показано на изображении ниже.

Автонавигация внутри гугл-таблиц

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

Практика

Теперь, когда мы научились первым основам, создадим гугл документ. Я назвал его «GD learn 1». Вы можете ознакомиться с документом по этой ссылке.

Автонавигация внутри гугл-таблиц

Создадим в документе 2 первые страницы «Юниты» и «Здания», которые в будущем будут друг на друга ссылаться. В юнитах мы будем вводить где они производятся, а в зданиях будет отображать кто в них произовдится.

Начальное содержимое юнитов:

Автонавигация внутри гугл-таблиц

Начальное содержимое зданий:

Автонавигация внутри гугл-таблиц

В будущем нам потребуется ссылаться на обе эти страницы. Давайте узнаем адрес ссылки на ячейку «B1» и для юнитов, и для зданий, как Вы были научены этому вначале данной статьи.

В моём случае получились следующие адреса для Юнитов и Зданий соответственно:

Автонавигация внутри гугл-таблиц

Ссылки отличаются только той частью, где указывается id страницы. У страницы юнитов id = 0, у страницы зданий id = 771235142

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

Автонавигация внутри гугл-таблиц

Обратите внимание, что в качестве значений я перенёс ссылки не полностью, а лишь до последнего символа «B», без указания номера строки.

Давайте укажем уникальные имена для ячеек B2 и B3 через «поле названия» и зададим им имена «ПрефЮниты» и «ПрефЗдания» соответственно, чтобы мы могли на них ссылаться из других формул.

Автонавигация внутри гугл-таблиц

Теперь вернёмся к странице «Юниты».

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

Думаю, вы уже догадываетесь, что вместо названия здания — мы должны оперировать номером строки, в котором данное здание производится.

Найти нужные строки несложно.

Функция ПОИСКПОЗ()

Для начала — создадим новый столбец «Строка здания»

Затем, введём формулу для первого юнита, как указано на скриншоте ниже:

Автонавигация внутри гугл-таблиц

Функция «ПОИСКПОЗ» ищет указанное значение в диапазоне и возвращает в нашем случае строку, в которой находится желанное значение.

Данная функция имеет 3 аргумента:

  1. что ищем — укажем, что ищем указанное в соседней ячейке здание (то есть — «Бараки»)
  2. где ищем — укажем столбец из страницы «Здания», где перечислены названия зданий.
  3. режим сопоставления — здесь мы указали значение «0» что означает, что мы хотим найти точное значение. Обязательно укажите это значение, иначе начнут возникать ошибки.

В результате получим следующее:

Автонавигация внутри гугл-таблиц

Теперь «протянем» эту формулу на всех юнитов. Для этого нажмите мышкой по синему квадрату слева снизу ячейки, и не отпуская протяните её до последнего юнита, как показано на скрине:

Автонавигация внутри гугл-таблиц

Вот что должно получиться:

Автонавигация внутри гугл-таблиц

Для нас «строка здания» — вспомогательный столбец. Теперь мы можем им воспользоваться, чтобы получить ссылку на каждое здание в столбце «ссылка на здание».

Для этого введём формулу, как указано ниже:

Автонавигация внутри гугл-таблиц

Ещё не забыли, что ПрефЗдания — это название ячейки, в которой мы указали преффикс ссылки на соответствующую страницу? Если забыли — то найдите первое упоминание «ПрефЗдания» в данной статье -)

Аналогично протянем формулу на весь столбец и получим следующее:

Автонавигация внутри гугл-таблиц

Для лаконичности, когда мы разобрались с тем как что работает — предлагаю переименовать столбец «Строка здания» в простое «#»

Автонавигация внутри гугл-таблиц

Отлично! Теперь, при клике по ссылке — пользователь моментально перенесётся к той части документа, где описаны характеристики соответствующего здания.

Давайте, чтобы было приятнее работать с документом, сделаем ещё пару манипуляций.

Для начала — добавим иконки для всех юнитов и всех зданий в столбец «A» (Иконка).

Для этого выделите нужную ячейку и воспользуйтесь командой «Вставка → Изображение → Вставить изображение в ячейку». После чего укажите желаемое изображение (можно изображения брать из буфера обмена, предварительно скопировав их туда где-нибудь из интернета).

Автонавигация внутри гугл-таблиц

Вначале у Вас получится что-то на подобии такого, не совсем читаемого

Автонавигация внутри гугл-таблиц

Чтобы иконки было проще читать — увеличьте размер строк таким образом, чтобы их высота совпадала с шириной столбца A, и тогда получится нечто такое:

Автонавигация внутри гугл-таблиц

и

Автонавигация внутри гугл-таблиц

Отлично!

Функция ИНДЕКС()

Теперь, когда для каждого элемента контента у нас есть картинка — давайте заменим текст ссылки «перейти к зданию» на картинку самого здания!

Сделать это очень просто, но для начала напомню как у нас формула выглядит в данный момент:

Автонавигация внутри гугл-таблиц

Давайте заменим второй аргумент, и вместо строки «Перейти к зданию» вложим следующую функцию:

Автонавигация внутри гугл-таблиц

Если раньше никогда с ней не сталкивались — попробуйте самостоятельно разобраться как она работает. Кому разбираться лень — ответ ниже.

Функция ИНДЕКС позволяет выбрать определённый элемент из заданного диапазона.

В данном случае мы указали столбец с картинками зданий и запросили вернуть элемент #2 из этого массива.

То есть, в конечном итоге, формула «ИНДЕКС( 'Здания'!A:A; D2 )» вернёт картинку Бараков. А так как эта формула в качестве аргумента «текст ссылки», то вместо текста будет отображена соответствующая картинка.

Результат следующий:

Автонавигация внутри гугл-таблиц

Скопируем эту формулу во все строки, и получим:

Автонавигация внутри гугл-таблиц

И это не просто картинка здания. Это картинка-ссылка -) Если мы наведём на одно из них, то получим информацию о том, куда эта ссылка ведёт:

Автонавигация внутри гугл-таблиц

Теперь перейдём к более тяжёлой задаче.

Мы хотим, чтобы каждое здание давало ссылку на производимых в нём юнитов. Давайте перейдём к странице «Здания» и вообще вспомним как она сейчас выглядит:

Автонавигация внутри гугл-таблиц

Будем двигаться к цели постепенно.

Функции JOIN() и FILTER()

Для начала просто строкой выведем что в них производится.

Введём следующую формулу (мы её разберём немного попозже), которая затрагивает сразу две новые функции (JOIN и FILTER):

Автонавигация внутри гугл-таблиц

Результат её выполнения Вы видите ниже:

Автонавигация внутри гугл-таблиц

Теперь разберём как работают затронутые функции. начнём с функции «JOIN»

Итак, Join объединяет множество строк и вставляем между ними указанный символ.

Например, если Вы введёте как указано ниже:

Автонавигация внутри гугл-таблиц

То получите следующий результат:

Автонавигация внутри гугл-таблиц

Теперь рассмотрим функцию FILTER

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

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

Например, из таблицы ниже нам нужно взять только те товары, которые относятся к категории «провизия». Для этого воспользуемся формулой как на скриншоте:

Автонавигация внутри гугл-таблиц

Получим следующий результат:

Автонавигация внутри гугл-таблиц

Так как результатом работы функции FILTER является массив, то он отображается сразу в нескольких ячейках (по ячейке на каждый элемент массива).

Однако, если мы опоясаем эту формулу функцией JOIN, как это показано на скрине ниже — то в результате получится одна строка. Вводим:

Автонавигация внутри гугл-таблиц

И получаем:

Автонавигация внутри гугл-таблиц

Подытожим — сначала функция FILTER выдаёт отфильтрованный массив, затем функция JOIN объединяет его через запятую.

Вернёмся к нашим зданиям. Получившуюся формулу распространяем на весь столбец и получаем:

Автонавигация внутри гугл-таблиц

Теперь в соседних столбцах мы можем отобразить иконки производимых ресурсов. Давайте создадим столбец «Юниты» и введём формулу, как указано ниже:

Автонавигация внутри гугл-таблиц

Получим результат:

Автонавигация внутри гугл-таблиц

Перейдём к разбору формулы.

Функция ТРАНСП — меняет местами строки и столбцы, поэтому вместо того, чтобы были выведены значения в каждой новой строке — они выводятся в каждом новом столбце.

Функция FILTER в данном случае ссылается на массив изображений юнитов, и фильтрует их по столбцу «Юниты!C:C», в котором для каждого юнита указывается место производства.

Однако, у нас получились простые картинки юнитов. Они не являются ссылками. Мы бы могли засунусть сюда же функцию ГИПЕРССЫЛКА, но в данном случае формула вышла бы слишком громоздкой.

Вместо этого слегка облегчим себе задачу и пойдём другим путём.

Вернёмся на страницу Юниты и создадим себе вспомогательный столбец «Самоссылка».

Автонавигация внутри гугл-таблиц

И введём туда следующую формулу:

Автонавигация внутри гугл-таблиц

Здесь функция СТРОКА() — будет возвращать номер строки, в которой эта формула введена. То есть в данном случае вместо СТРОКА() подставится цифра 2 (так как формула располагается во второй строке).

А в качестве текста ссылки мы ссылаемся на Иконку, указанную в стобце А.

Получится следующий результат:

Автонавигация внутри гугл-таблиц

Почти то же самое, что и в столбце «иконка», но в данном случае это будет не просто картинка, а картинка-ссылка, которая ссылается на этого же юнита.

Если Вы ещё не понимаете для чего это нужно, то поймёте позже. А пока — скопируем эту формулу на все строки и получим:

Автонавигация внутри гугл-таблиц

Теперь вернёмся к Зданиям и вспомним формулу, которая ссылается на портреты юнитов и слегка её отредактируем. Теперь вместо того, чтобы она ссылалась на иконки юнитов (Юниты!A:A) она будет ссылаться на их самоссылки (Юниты!F:F) и примет следующий вид:

Автонавигация внутри гугл-таблиц

Распространим эту формулу на все строки и получим результат:

Автонавигация внутри гугл-таблиц

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

Итоги

Подведите сами.

Спасибо за внимание -) Если хотите больше статей — давайте обратную связь и оставляйте комментарии. Только это может мотивировать меня на следующие статьи.

PS — посетите мой канал, в котором я иногда выкладываю что-то полезное по геймдизайну

151151
25 комментариев

Можно попробовать использовать вот это решение. Из коробки есть все эти ссылки между документами и т. п. Помимо этого лайвопс из коробки и весь код по парсингу и мапингу json'ов автогенерируется в Unity.
В ближайшие месяцы появится импорт/экспорт в спредшиты Гугловские.

18

Интересная датабейс, не знал о ней. Надо будет пощупать.

3

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

2

@Улучшаем DTF добавьте туториал в редактор постов

3

Исправил, спасибо!

2

Мощно, спасибо! Подписался, статью в закладки.

2

Комментарий недоступен

2