Google Таблицы
62.6K subscribers
461 photos
148 videos
8 files
836 links
Работа в Google Таблицах. Кейсы, решения и угар.

админы:
@namokonov
@r_shagabutdinov
@IT_sAdmin

оглавление: goo.gl/HdS2qn
заказ работы: teletype.in/@google_sheets/sheet_happens
купить рекламу: https://telega.in/c/google_sheets

РКН: clck.ru/3F3u9M
Download Telegram
Примеры применения ссылок на таблицы в формулах
начало про ссылки в "умных" таблицах тут

Пара примеров того, как можно использовать ссылки на таблицы на практике.

Допустим, у вас несколько таблиц с одинаковыми заголовками. Чтобы собирать их на одном листе с обновлением, используем функцию VSTACK. Первую берем с заголовками, а в остальных случаях только тело таблицы, чтобы заголовки не дублировались:


=VSTACK(ПерваяТаблица[#ALL]; [Вторая]; ... [ЕщеТаблица])


Если нам надо загрузить умную таблицу из другого файла — засунем ее во второй аргумент IMPORTRANGE. Если нужно с заголовками — опять-таки, добавляем #ALL:


=IMPORTRANGE("ID исходной таблицы"; "УмнаяТаблица[#ALL]")


Только в случае с IMPORTRANGE мы берем название таблицы в кавычки, т.к. это не активная ссылка, а текстовый аргумент этой функции.

И вот в обоих случаях нам не надо беспокоиться о том, сколько будет строк в таблицах-источниках. Все новые строки соберутся в одну пачку функцией VSTACK или будут импортированы IMPORTRANGE.
Запускаем скрипт ровно в 55 минут

Друзья, мне написал Владислав - у него есть скрипт и он хочет его запускать каждый час в конкретной время (например, в 55 минут каждого часа)

Мы решили помочь и написали скрипт, который

1) запускает нужный нам скрипт;
2) далее проверяет, есть ли скрипт в триггерах проекта, если есть - удаляет этот триггер
3) далее создаёт новый триггер, на следующий час, чтобы тот запустился в введенные в коде минуты (аргумент mins)


function googleSheets() {
setDate(); // запускаем нашу функцию

let fName = arguments.callee.name; // получаем имя текущей функции
let triggers = ScriptApp.getProjectTriggers(); // удаляем триггер с текущей функцией, если он есть
for (let i = 0; i < triggers.length; i++) {
let trigger = triggers[i];
if (trigger.getHandlerFunction() == fName) {
ScriptApp.deleteTrigger(triggers[i]);
};
};

let dt = new Date(); //рассчитываем время для запуска функции в следующий раз
let h = dt.getHours();
let mins = 44; //устанавливаем триггер на следующий час на это время
let newDt = new Date(dt.setHours(h, mins, 0) + 60 * 60 * 1000);
Logger.log(newDt);

ScriptApp.newTrigger(fName) // ставим функцию на триггер
.timeBased()
.at(newDt)
.create();
};

function setDate() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheets()[0];
sh.getRange((sh.getLastRow() || 0) + 1, 1)
.setValue(new Date());
};


Таблица с примером

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
This media is not supported in your browser
VIEW IN TELEGRAM
Парсим данные из веб-страницы в Таблицу скриптами


Добрый День господа!

Я - Василий!

〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Сегодня небольшой, но полезный скрипт, о том, как спарсить данные с сайта на примере сайта о проведении Бильярдных турниров https://fairplay.host/.
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Цель:

Собрать список участников указанных турниров и посчитать сколько раз каждый из участников участвовал в этих турнирах, для дальнейшего награждения лучших.
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Решение:

1. Забираем с первого листа таблицы список ссылок на турниры:

const ss = SpreadsheetApp.getActive();
const spisokTurnirov = ss
.getSheetByName('Список турниров')
.getDataRange()
.getValues()
.slice(1);


2. В коде страницы находим ссылку на API и проходим по всем ссылкам в цикле, формируя список участников с указание их города:

var arr = [];
spisokTurnirov.forEach(x => {
x = x[0].match(/\d{4,}/);
const url = 'https://fairplay.host/api/tournament/details?id=' + x[0];
arr = [...arr, ...pars(url)]
})


3. Создаём объект и считаем количество участником и далее вставляем их на другой лист:

let spr = {}; //создаём пустой объект

arr.forEach(z => {

let iii = spr[z[0]];
!iii ? spr[z[0]] = 1 : spr[z[0]] = iii + 1; // тернарный оператор
});


Делайте копию таблицы, пробуйте, смотрите код, пишите вопросы, с радостью на них ответим!

Полный код в таблице с примером.
Таблица с примером

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Проектная диаграмма с выделением выходных отдельным цветом

(или не выходных, а определенных дней недели — тут вы по аналогии справитесь😉)

Создаем два правила условного форматирования с формулами и выбираем разные цвета.

Для рабочих:

=AND(первая дата с закреплением строки>=начало первого этапа с закреплением столбца; первая дата<=конец первого этапа;WEEKDAY(дата;2)>5)


Для выходных (уже не в общем виде, а с ячейками):

=И(D$1>=$B2;D$1<=$C2;ДЕНЬНЕД(D$1;2)<6)


Таблица

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Наш чат, в котором мы уже 6 лет отвечаем на ваши вопросы: @google_spreadsheets_chat

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

Оглавление нашего канала, где перечислены все наши посты: Оглавление канала
Полезные чатики по теме

Помимо нашего чата советуем чат наших друзей по скриптам: @googleappsscriptrc

И по Таблицам: @google_sheets_pro

👾 Делитесь в комментариях чатами по Таблицам, Excel, программированию, добавим в пост
Клавиши для выделения столбца/строки

Ctrl + пробел — выделение всего столбца
.
Первое нажатие: столбец в рамках диапазона (если активна ячейка какого-то диапазона/таблицы);
Второе: весь столбец листа.

Shift + пробел — выделение всей строки (в случае с таблицей сначала ее строки, затем строки всего листа)

Как запомнить? Клавиша Shift обычно длиннее. Как строка 🙂

❤️ Канал @google_sheets
📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Самое часто встречающееся текстовое значение

Самое частое число — это мода. Функция МОДА / MODE.

А как найти самое часто встречающееся текстовое значение?
Бен Коллинс в своей книге предлагает решение через MATCH (можно и XMATCH, которая просто по умолчанию ведет точный поиск без обязательного третьего аргумента = 0)

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

IFNA(XMATCH(B2:B;B2:B);)

Потом ищем самое частое число в этом диапазоне:

MODE(IFNA(XMATCH(B2:B;B2:B);))

И извлекаем по этому порядковому номеру текст ИНДЕКСом / INDEX:

=ArrayFormula(INDEX(B2:B; MODE(IFNA(XMATCH(B2:B;B2:B)))))


Таблица с примером


📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Друзья, поздравляем с наступившими праздниками! Повторяем пост с нашим полезным скриптом.


Редактируем Google Форму прямо из Таблицы!

Друзья, мы подготовили Таблицу, с помощью неё вы сможете облегчить себе редактирование Google Формы.

Как всё работает - на гифке, гифка сегодня со звуком.

Что происходит после запуска скрипта в Таблице:
1) в четвертой строке листа "🔥" Таблицы - вопросы, в пятой строке - тип каждого вопроса, под каждым вопросом и типом - варианты ответа, в ячейке "🔥!B2" - форма, которую будем редактировать
2) запускаем скрипт кликом на кнопку и код ищет каждый вопрос по названию в Google Форме
3) если вопрос найден - то скрипт обновляет варианты ответа
4) если вопрос не найден - скрипт добавляет этот вопрос в Google Форму с заданным типом и вариантами ответа

Типы вопросов, с которыми умеет работать скрипт:
CHECKBOX – выбираем ответ на вопрос чекбоксами, можно выбрать несколько вариантов
LIST – выбираем ответ из выпадающего списка
MULTIPLE_CHOICE – выбираем ответ в переключателе

Чтобы воспользоваться Таблицей - копируйте себе

---
⭐️ Оглавление канала: ты-дыц
⭐️ Самый табличный чат на свете: бадабум
Друзья, с началом нового рабочего года вас!

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

Чтобы получать число прописью, обычно используют пользовательские функции. Но если вам нужно без "рублей" и "копеек", можно воспользоваться функцией BAHTTEXT — она превращает число в текст на тайском с добавлением слова "бат", названия валюты (название тоже на тайском, что логично).

А мы это дело переведем на русский или другой нужный язык с помощью GOOGLETRANSLATE.

А потом останется убрать слово "бат" (бата, батов — смотря какое число будет). С помощью REGEXREPLACE.

Повторимся, для нормальной реализации (с рублями-копейками, для договоров) нужна пользовательская функция или надстройка с ней — про это мы тоже напишем

=REGEXREPLACE(GOOGLETRANSLATE(BAHTTEXT(A1);"th";"ru");"бата?\.|батов \.";"")
This media is not supported in your browser
VIEW IN TELEGRAM
Диаграмма с выбором рядов (флажками)

Добавляем флажки для каждого ряда данных.

Дублируем данные для диаграммы, но формулой, которая будет возвращать значение из исходного диапазона только в том случае, если в соответствующем столбце флажок включен, то есть там значение TRUE / ИСТИНА. А если флажок выключен, то будет возвращать значение N/A с помощью одноименной функции. А такие значения на диаграммах не отображаются. Что нам и надо!

=IF(флажок;ячейка с данными;NA())


Строки с формулами можно скрыть, чтобы не любоваться всеми этими НД-шками, а только любоваться данными да диаграммой волшебной.

P.S. Так как периодически мы видим такое в чатах и таблицах, напомним: если вы проверяете статус флажка, не нужно отдельно прописывать равенство ячейки с флажком значению TRUE.
То есть формулы (где B$1 — ячейка с флажком)
=IF(B$1;...

и
=IF(B$1=TRUE;...

будут работать одинаково. Потому что включенный флажок — это TRUE. Так что в первом варианте будет TRUE. И во втором TRUE = TRUE вернет TRUE. Так что ничего страшного в избыточности нет, но и не нужно :)

P.P.S. В Excel все будет работать аналогично. Правда вот флажки в ячейках есть лишь в 365, а во всех старых версиях можно вставить флажки — элементы управления с вкладки ленты "Разработчик". Подробнее — в статье.

Таблица с примером.

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Как выделить / найти все формулы на листе?

Можно просто нажать Ctrl + `
Или в меню: Вид - Показать - Формулы (View - Show - Formulae), или Alt+V + S + A.

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

Но если вам нужно выделить ячейки с формулами цветом, чтобы их сразу визуально считывать (или, наоборот, ячейки без формул) - можно воспользоваться условным форматированием и функцией ISFORMULA — как на скриншоте.


📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Чатно-канальный бот v1


Бот, который сохраняет сообщения из вашего канала в Таблицу
(🚨c видео-инструкцией по установке!)


Друзья, привет! Мы с 2017 года ведём свой канал про Google Таблицы и скрипты.

Выкладываем посты и иногда их удаляем. Как найти пост, который мы удалили? Смотреть в истории изменений - история есть, но она небольшая, слишком далеко её не открутишь.

Поэтому мы сделали телеграм бота для себя и делимся им с вами.

Бот простой - мы его добавляем на канал как администратора, с минимальными правами и каждый созданный на канале пост (и бусты и изменения прав) бот отправляет в Google Таблицу как строку.

Таблица, копируйте
Библиотека, копируйте
Видео по настройке

🧩 Мы делаем ботов посложнее на заказ

⭐️ Через месяц мы запустим курс "как сделать бота для своего бизнеса" :) Следите за анонсами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Google Таблицы
Совсем немножко осталось, добьем, господа?

https://t.me/google_sheets/1569
Google Таблицы
Чатно-канальный бот v1 Бот, который сохраняет сообщения из вашего канала в Таблицу (🚨c видео-инструкцией по установке!) Друзья, привет! Мы с 2017 года ведём свой канал про Google Таблицы и скрипты. Выкладываем посты и иногда их удаляем. Как найти пост…
Media is too big
VIEW IN TELEGRAM
Чатно-канальный бот v2

Друзья, по вашим просьбам обновили код бота, теперь бот умеет получать сообщения и из каналов и из чатов, а также информацию об авторе сообщения.

В видео показал, как всё теперь работает.

Таблица, копируйте
Библиотека, копируйте
Видео по настройке

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Показать защищенные диапазоны

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

Вид — Показать — Защищенные диапазоны
View — Show — Protected ranges

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


📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Чатно-канальный бот v3
(в видео - как это чудо работает)

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

В видео - как это работает.

Таблица, копируйте
Библиотека, копируйте
Видео по настройке


🍏Хотите уметь делать таких ботов самостоятельно?

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