Долго искал, мало что нашел, но смог реализовать!
Задача. Существует определённое количество гугл таблиц, которые заполняются онлайн, нужна единая сводная таблица из этих всех таблиц.
Проблема в том, что собрать данные с разных таблиц в одну, не так уж и сложно, НО есть как говорится свои нюансы.
Итак, расскажу как все было у меня и зачем это мне.
На нашем самом крутом турнире по силовым видам спорта SPS есть EXPO (выставка, спонсоры, локации). Для зрителей и посетителей решили сделать бесплатную лотерею.
Условия. Зрителям необходимо было просто подойти к стенду, отсканировать QR-код чат-бота, выполнить условия и зарегистрироваться в розыгрыше.
Так как условием изначально было подписаться на канал Siberian Power Show, спонсорам было предложено, чтобы на их стенде, человек подписывался не на нас, а на них. Соответсвенно, для каждого спонсора был создан и настроен чат-бот.
Ведущий на сцене каждый час, в течении 3х дней, рандомно выбирает победителей.
Механизм.
- Сканируешь QR-код и попадаешь в чат-бот
- Подписываешь на канал
- Вводишь своё Имя и номер телефона
- Нажимаешь "Участвовать"
Чтобы люди не вводили левые номера телефонов, чат-бот проверял зарегистрированных не по введённому номеру, а по id телеграмма.
Чат-бот каждого спонсора заполнял свою гугл таблицу. Далее все записи сводятся в единую таблицу и сортируются по дате и времени регистрации.
Чтобы собрать файлы в единую таблицу, необходимо указать диапазон, который надо брать из других файлов. Так как мы не знаем сколько будет зарегистрированных, количество строк я поставил 999. Проблема в том, что гугл в сводную таблицу добавляет именно 999 строк и пофигу, что они пустые. Соответственно, надо, чтобы автоматически удалялись пустые и далее сортировались по дате и времени. Получился в итоге вот такой код ячейки:
=QUERY({IMPORTRANGE("https://docs.google.com/spreadsheets/d/ПУТЬ1/edit?usp=sharing";"Розыгрыш1!A1:F999");IMPORTRANGE("https://docs.google.com/spreadsheets/d/ПУТЬ2/edit?usp=sharing";"Розыгрыш2!A1:F999")};"select * where Col1 is not null order by Col1")
Для импорта файла используем функцию IMPORTRANGE, описание её доступное и понятное. В ней мы как раз указываем нужный нам диапазон.
Дальше все сделает мощнейшая функция работы с массивом QUERY.
=QUERY("select * where Col1 is not null order by Col1")
select - перечисление полей, которые будут возвращены запросом
where - содержит перечень условий, с помощью которых будет отфильтрован массив данных, обрабатываемый запросом
order by - сортировка результатов
Чат-боты настроены с помощью площадки leadteh
Если у Вас есть вопросы - пишите :)