🧩 Как достать рейтинг товара с сайта через IMPORTXML
Друзья, привет! Некоторые сайты можно парсить прямо из Google Таблиц с помощью
Задача
Из страницы:
нужно достать рейтинг товара (например, 4.82 из 5 звезд).
В коде страницы нужный элемент выглядит так:
🧠 XPath-запрос
Чтобы достать эти данные, используем XPath:
Разбираем:
1.
2.
3.
Формула в Google Таблицах
Формула пошагово:
1.
2.
3.
5.
📌 В итоге в ячейке вы получите чистое число
Задавайте вопросы в нашем чате: @google_spreadsheets_chat
Друзья, привет! Некоторые сайты можно парсить прямо из Google Таблиц с помощью
IMPORTXML.Задача
Из страницы:
https://okapteka.ru/moskva/adyenoprosin-susp-ryekt-29mg-10-549226/
нужно достать рейтинг товара (например, 4.82 из 5 звезд).
В коде страницы нужный элемент выглядит так:
<div class="product-reviews__rating">4.82 из 5 звезд</div>
🧠 XPath-запрос
Чтобы достать эти данные, используем XPath:
//div[@class='product-reviews__rating']
Разбираем:
1.
// - ищем в любом месте документа2.
div - тип элемента, который ищем3.
[@class='product-reviews__rating'] - фильтруем: берём только те div, где атрибут class равен "product-reviews__rating"Формула в Google Таблицах
=--SUBSTITUTE(INDEX(
SPLIT(IMPORTXML(A2;"//div[@class='product-reviews__rating']");" ");
1);
".";",")
Формула пошагово:
1.
IMPORTXML - тянет содержимое <div> (например, "4.82 из 5 звезд")2.
SPLIT(...;" ") - разбивает по пробелам - {"4.82" \ "из" \ "5" \ "звезд"}3.
INDEX(...;1) - берёт первое значение - "4.82"
4. SUBSTITUTE(...;".";",") - заменяет точку на запятую (для русской локали)5.
VALUE(...) или --(...) - превращает текст "4,82" в число 4,82📌 В итоге в ячейке вы получите чистое число
4,82, готовое для расчётов, фильтрации и красивых дашбордов.Задавайте вопросы в нашем чате: @google_spreadsheets_chat
2❤22🔥9👍2👎1
Алиса, извлеки электропочты!
Точнее, =АЛИСАПРО("извлеки электропочты"; A2).
Да, в редакторе таблиц от Яндекс 360 теперь есть такая функция в формулах и доступна всем пользователям.
Если ее не видите — убедитесь, что вы в новой версии редактора — см. переключатель на скриншоте. Вас встретит новость про функцию — см другой скриншот.
Как видно на скриншоте, вполне себе заменяет регулярки с объединением и проверку на пустой результат в одном флаконе.
Или справляется с тем, что решалось через регулярки (в Google Таблицах и новом Excel) или многоэтажные мучения с текстом по столбцам и ПРОСМОТРом в старом Excel.
Можно и не задавать второй аргумент — диапазон. А просто попросить написать формулу:
То есть это такая справка/помощь по функциям-формулам прямо на рабочем листе.
Еще до конца года обещают решение с собственной реализацией CRDT (конфликтно-устойчивые реплицируемые типы данных), которое позволит изменить подход к редактированию файлов. Тогда одновременно работать смогут до 400 человек.
А на начало следующего года обещаны десктопные версии Таблиц и Документов. Презентации тоже планируют обновлять (интересно, Алиса сможет и слайды рисовать по запросу?)
Точнее, =АЛИСАПРО("извлеки электропочты"; A2).
Да, в редакторе таблиц от Яндекс 360 теперь есть такая функция в формулах и доступна всем пользователям.
Если ее не видите — убедитесь, что вы в новой версии редактора — см. переключатель на скриншоте. Вас встретит новость про функцию — см другой скриншот.
Как видно на скриншоте, вполне себе заменяет регулярки с объединением и проверку на пустой результат в одном флаконе.
Или справляется с тем, что решалось через регулярки (в Google Таблицах и новом Excel) или многоэтажные мучения с текстом по столбцам и ПРОСМОТРом в старом Excel.
Можно и не задавать второй аргумент — диапазон. А просто попросить написать формулу:
=АЛИСАПРО("Напиши формулу для вычисления...")
То есть это такая справка/помощь по функциям-формулам прямо на рабочем листе.
Еще до конца года обещают решение с собственной реализацией CRDT (конфликтно-устойчивые реплицируемые типы данных), которое позволит изменить подход к редактированию файлов. Тогда одновременно работать смогут до 400 человек.
А на начало следующего года обещаны десктопные версии Таблиц и Документов. Презентации тоже планируют обновлять (интересно, Алиса сможет и слайды рисовать по запросу?)
🔥17👍7❤5👎1🤡1
🌤 Погода, часть 1. Получаем прогноз в Красной Поляне и записываем в Таблицу
Друзья, привет!
Мы сделали для вас Таблицу со скриптом, который обращается к бесплатному API api.open-meteo.com по введённым координатам и возвращает в Таблицу температуру и осадки на сегодня и завтра.
Делайте копию, ниже разберём, как всё работает.
1. Формируем ссылку запроса
Ссылка выглядит так:
где
* latitude - широта,
* longitude - долгота места, для которого получаем прогноз.
В примере указаны координаты курорта Красная Поляна.
2. Смотрим на ответ API
Если перейти по ссылке (можете прямо в браузере), API вернёт JSON вроде этого:
В нём содержится прогноз погоды и осадков на ближайшие 7 дней, включая текущий.
3. Извлекаем нужные данные
* Температура на сегодня
*Осадки на сегодня
4. Чтобы извлечь следующие дни
Для завтра используем индекс
📢 В следующем посте покажем, как автоматически отправлять прогноз погоды в Telegram-канал.
Друзья, привет!
Мы сделали для вас Таблицу со скриптом, который обращается к бесплатному API api.open-meteo.com по введённым координатам и возвращает в Таблицу температуру и осадки на сегодня и завтра.
Делайте копию, ниже разберём, как всё работает.
1. Формируем ссылку запроса
Ссылка выглядит так:
https://api.open-meteo.com/v1/forecast?latitude=43.676932&longitude=40.251855&daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=auto
где
* latitude - широта,
* longitude - долгота места, для которого получаем прогноз.
В примере указаны координаты курорта Красная Поляна.
2. Смотрим на ответ API
Если перейти по ссылке (можете прямо в браузере), API вернёт JSON вроде этого:
{
"latitude": 43.6875,
"longitude": 40.1875,
"generationtime_ms": 0.07867813110351562,
"utc_offset_seconds": 10800,
"timezone": "Europe/Moscow",
"timezone_abbreviation": "GMT+3",
"elevation": 722,
"daily_units":
{
"time": "iso8601",
"temperature_2m_max": "°C",
"temperature_2m_min": "°C",
"precipitation_sum": "mm"
},
"daily":
{
"time": [
"2025-11-01",
"2025-11-02",
"2025-11-03",
"2025-11-04",
"2025-11-05",
"2025-11-06",
"2025-11-07"
],
"temperature_2m_max": [
13,
12.7,
17.1,
18.7,
17.7,
22.6,
23
],
"temperature_2m_min": [
6.6,
5.1,
6.5,
10,
10.5,
11,
17.1
],
"precipitation_sum": [
0,
0,
0,
0,
0,
0,
0
]
}
}
В нём содержится прогноз погоды и осадков на ближайшие 7 дней, включая текущий.
3. Извлекаем нужные данные
* Температура на сегодня
data.daily.temperature_2m_min[0]
data.daily.temperature_2m_max[0]
*Осадки на сегодня
data.daily.precipitation_sum[0]
4. Чтобы извлечь следующие дни
Для завтра используем индекс
[1], для послезавтра [2] и так далее.📢 В следующем посте покажем, как автоматически отправлять прогноз погоды в Telegram-канал.
❤15👍11🔥5👎1🤡1
🚞Не расписание электричек, но список всех станций "от и до" — формулой
Задача — склеить все значения в заданном диапазоне (задаем начало и конец) в одну текстовую строку.
Как и у любой задачи, вариантов решения всегда много — предлагайте свои! Вот один из:
1 Находим, в каких строках первая и последняя станция — это XMATCH
2 Отправляем найденные номера строк в ИНДЕКСы
3 Превращаем два ИНДЕКСа в ссылки, ставя между ними двоеточие.
4 Склеиваем полученный массив в один текст с помощью JOIN
Таблица с примером
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Задача — склеить все значения в заданном диапазоне (задаем начало и конец) в одну текстовую строку.
Как и у любой задачи, вариантов решения всегда много — предлагайте свои! Вот один из:
1 Находим, в каких строках первая и последняя станция — это XMATCH
2 Отправляем найденные номера строк в ИНДЕКСы
3 Превращаем два ИНДЕКСа в ссылки, ставя между ними двоеточие.
4 Склеиваем полученный массив в один текст с помощью JOIN
=JOIN(" - ";
ИНДЕКС(список станций;XMATCH(начальная;список)):ИНДЕКС(список;XMATCH(конечная;список)))
Таблица с примером
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
👍11❤8🔥5👎1🤡1
Google Таблицы
🌤 Погода, часть 1. Получаем прогноз в Красной Поляне и записываем в Таблицу Друзья, привет! Мы сделали для вас Таблицу со скриптом, который обращается к бесплатному API api.open-meteo.com по введённым координатам и возвращает в Таблицу температуру и осадки…
Погода, часть 2, @ski_weather
Друзья, привет! Мы продолжаем работать с бесплатным погодным API api.open-meteo.com.
С помощью кода в Таблице, которую мы вам приготовили, вы сможете получать данные по погоде в указанных точках (в скрипт передаётся широта и долгота) на сегодня, завтра и послезавтра.
Скрипт группирует данные по каждой точке в одно сообщение и отправляет его с помощью Telegram-бота в ваш телеграм-канал (или чат или в личку).
Что нужно сделать, чтобы повторить всё у себя
1) Делаете копию Таблицы с примером.
2) На листе settings вводите координаты и названия точек.
3) Регистрируете в @BotFather своего Telegram-бота и получаете его токен.
4) Создаёте канал или чат (или используете существующий), добавляете в него бота с правами администратора.
5) Открываете редактор скриптов и заменяете
6) Один раз запускаете функцию main. Если всё работает корректно, ставите её на триггер, например, на ежедневный запуск каждое утро.
Таблица с кодом / Код отдельно (без копирования Таблицы)
🐟 Заказать работу у нас: @namokonov
Друзья, привет! Мы продолжаем работать с бесплатным погодным API api.open-meteo.com.
С помощью кода в Таблице, которую мы вам приготовили, вы сможете получать данные по погоде в указанных точках (в скрипт передаётся широта и долгота) на сегодня, завтра и послезавтра.
Скрипт группирует данные по каждой точке в одно сообщение и отправляет его с помощью Telegram-бота в ваш телеграм-канал (или чат или в личку).
Что нужно сделать, чтобы повторить всё у себя
1) Делаете копию Таблицы с примером.
2) На листе settings вводите координаты и названия точек.
3) Регистрируете в @BotFather своего Telegram-бота и получаете его токен.
4) Создаёте канал или чат (или используете существующий), добавляете в него бота с правами администратора.
5) Открываете редактор скриптов и заменяете
botToken и chat_id для отправки сообщения на свои (как получить chat_id — смотрите на канале).6) Один раз запускаете функцию main. Если всё работает корректно, ставите её на триггер, например, на ежедневный запуск каждое утро.
Таблица с кодом / Код отдельно (без копирования Таблицы)
🐟 Заказать работу у нас: @namokonov
🔥11❤4👍4👎1🤡1
Переведём
Друзья, эта строчка - это представление последовательности символов в юникоде.
Чтобы перевести строчку в гас-скриптах, используем функцию:
Как это работает:
1) регулярка
2)
3)
Если хочешь наоборот (из кириллицы сделать Unicode):
\u0411\u0430\u043d\u043a \u0425\u043e\u0440\u043e\u0448\u0438\u0445 \u0418\u0434\u0435\u0439 на читаемый русский 🙂Друзья, эта строчка - это представление последовательности символов в юникоде.
Unicode - это универсальный стандарт кодировки символов. Он нужен, чтобы одинаково представлять символы, цифры, эмоджи во всех языках и системах.
Чтобы перевести строчку в гас-скриптах, используем функцию:
function fromUnicode() {
const unicodeString = "\\u0411\\u0430\\u043d\\u043a \\u0425\\u043e\\u0440\\u043e\\u0448\\u0438\\u0445 \\u0418\\u0434\\u0435\\u0439";
const normalText = unicodeString.replace(/\\u([\dA-F]{4})/gi, (m, g) =>
String.fromCharCode(parseInt(g, 16))
);
console.log(normalText); // Банк Хороших Идей
}
Как это работает:
1) регулярка
\\u([\dA-F]{4}) находит все юникод-последовательности.2)
parseInt(g, 16) превращает шестнадцатеричный код в число.3)
String.fromCharCode() превращает число в символ.Если хочешь наоборот (из кириллицы сделать Unicode):
function toUnicode() {
const text = "Банк Хороших Идей";
const encoded = text.split('').map(ch =>
'\\u' + ('000' + ch.charCodeAt(0).toString(16)).slice(-4)
).join('');
Logger.log(encoded);
// → \u0411\u0430\u043d\u043a \u0425\u043e\u0440\u043e\u0448\u0438\u0445 \u0418\u0434\u0435\u0439
}
❤3👍2👎1🔥1🤡1
Google Таблицы
Переведём \u0411\u0430\u043d\u043a \u0425\u043e\u0440\u043e\u0448\u0438\u0445 \u0418\u0434\u0435\u0439 на читаемый русский 🙂 Друзья, эта строчка - это представление последовательности символов в юникоде. Unicode - это универсальный стандарт кодировки символов.…
Кто покажет, как перевести строчку юникода
Покажите в комментариях свой вариант :)
\u0411\u0430\u043d\u043a \u0425\u043e\u0440\u043e\u0448\u0438\u0445 \u0418\u0434\u0435\u0439 с помощью формулы в Таблице?Покажите в комментариях свой вариант :)
👍2❤1👎1🤡1
💬 Вопрос от Туко из нашего чата:
Как добавить к результату QUERY пустую строку — в начало или в конец?
Ответ:
Используем функцию
Чтобы добавить пустую строку в начало, оставляем первый аргумент пустым, а во втором указываем нашу
Если оставить первый диапазон пустым, то в результате появится одна ячейка сверху, а остальные будут заполнены значениями
Чтобы убрать
Чтобы добавить пустую строку в конец - просто поменяйте аргументы
Если ещё не пробовали — самое время 😊.
Как добавить к результату QUERY пустую строку — в начало или в конец?
Ответ:
Используем функцию
VSTACK, которая объединяет массивы данных вертикально.Чтобы добавить пустую строку в начало, оставляем первый аргумент пустым, а во втором указываем нашу
QUERY.Если оставить первый диапазон пустым, то в результате появится одна ячейка сверху, а остальные будут заполнены значениями
#N/A.Чтобы убрать
#N/A, обернём всё в IFNA без второго аргумента.
=IFNA(VSTACK(; QUERY(A1:B7;"select Col1, sum(Col2) group by Col1";0)))
Чтобы добавить пустую строку в конец - просто поменяйте аргументы
VSTACK местами:
=IFNA(VSTACK(QUERY(A1:B7; "select Col1, sum(Col2) group by Col1"; 0); ))
VSTACK и HSTACK — мощные функции для объединения диапазонов.Если ещё не пробовали — самое время 😊.
❤6👍3👎1🤡1
Google Таблицы
💬 Вопрос от Туко из нашего чата: Как добавить к результату QUERY пустую строку — в начало или в конец? Ответ: Используем функцию VSTACK, которая объединяет массивы данных вертикально. Чтобы добавить пустую строку в начало, оставляем первый аргумент пустым…
💡 А как вставить пустые столбцы в результат QUERY?
Чтобы вставить пустые столбцы, используйте приём с делением на
Например:
Добавив в запрос
Спасибо Алексею Одиссею из Одессы за идею 🙌
Чтобы вставить пустые столбцы, используйте приём с делением на
0 в SELECT.Например:
=QUERY(A1:D9;"select 1/0, Col1, 2/0, Col3";1)
Добавив в запрос
label для этих столбцов, можно убрать заголовки:
=QUERY(A1:D9;"select 1/0, Col1, 2/0, Col3 label 1/0 '', 2/0 ''";1)
Спасибо Алексею Одиссею из Одессы за идею 🙌
🔥24👎1🤡1
Google Таблицы
💡 А как вставить пустые столбцы в результат QUERY? Чтобы вставить пустые столбцы, используйте приём с делением на 0 в SELECT. Например: =QUERY(A1:D9;"select 1/0, Col1, 2/0, Col3";1) Добавив в запрос label для этих столбцов, можно убрать заголовки: =…
Но вставлять можно не только пустые столбцы
Например, создадим столбец с текстом и текущей датой:
Например, создадим столбец с текстом и текущей датой:
=QUERY(A1:D9;
"select '" & "Отчет " & TEXT(NOW();"dd-mm-yyyy") & "', Col1, 2/0, Col3";
1)
🔥10❤4👎1🤡1
Выводим в одной ячейке список выбранных в фильтре параметров
В примере — выбранные каналы продаж.
Используем, как водится, ПРОМЕЖУТОЧНЫЕ.ИТОГИ (SUBTOTAL), чтобы выявить отображаемые строки. Для этого каждое значение "подсчитываем" этой функцией — она вернет единицу, если значение в моменте отображается (выбрано в фильтре). Дубликаты потом убираем с помощью UNIQUE.
Еще идеи с этой функцией:
Делаем кнопку группировки с интерактивной надписью
Нумеруем только видимые строки
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
В примере — выбранные каналы продаж.
Используем, как водится, ПРОМЕЖУТОЧНЫЕ.ИТОГИ (SUBTOTAL), чтобы выявить отображаемые строки. Для этого каждое значение "подсчитываем" этой функцией — она вернет единицу, если значение в моменте отображается (выбрано в фильтре). Дубликаты потом убираем с помощью UNIQUE.
=JOIN("разделитель";UNIQUE(FILTER(столбец;MAP(столбец;lambda(a;SUBTOTAL(103;a)))=1)))
Еще идеи с этой функцией:
Делаем кнопку группировки с интерактивной надписью
Нумеруем только видимые строки
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
❤8🔥8👎1🤡1🍓1
Как узнать, что в Таблице удалили строки: готовый скрипт
Друзья, наш подписчик Дмитрий обратился за помощью - у него завёлся сотрудник, который удаляет в таблице строки, нужно как-то про это узнавать.
Мы написали короткий скрипт, он ниже
При удалении строки скрипт отправит на введённую почту (в примере это grclubpoker@gmail.com) сообщение, как на скриншоте.
Чтобы скрипт заработал:
Этот устанавливаемый триггер будет реагировать на изменения структуры Таблицы, к ним относится и удалении строк.
А еще в коде функция
🐟 Заказать работу у нас: @namokonov
Друзья, наш подписчик Дмитрий обратился за помощью - у него завёлся сотрудник, который удаляет в таблице строки, нужно как-то про это узнавать.
Мы написали короткий скрипт, он ниже
function onCha(e) {
if (e.changeType != 'REMOVE_ROW') { return; };
const sh = e.source.getActiveSheet();
const shName = sh.getName();
const range = sh.getActiveRange();
const startRow = range.getRow();
const numRows = range.getNumRows();
const msg = `В Таблице, на листе ${shName}, начиная со строки ${startRow} удалено ${numRows} ${plural(numRows)}, примите меры`;
GmailApp.sendEmail('grclubpoker@gmail.com', 'удалены строки', msg);
};
function plural(n) {
const forms = ["строка", "строки", "строк"]
n = Math.abs(n) % 100;
const n1 = n % 10;
if (n > 10 && n < 20) return forms[2];
if (n1 > 1 && n1 < 5) return forms[1];
if (n1 === 1) return forms[0];
return forms[2];
};
При удалении строки скрипт отправит на введённую почту (в примере это grclubpoker@gmail.com) сообщение, как на скриншоте.
Чтобы скрипт заработал:
1) поместите его в редактор скриптов в своей Таблице
2) Кликните на секундомер и откройте триггеры
3) Добавьте триггер: функцию onCha на тип события "Change / При изменении"
Этот устанавливаемый триггер будет реагировать на изменения структуры Таблицы, к ним относится и удалении строк.
А еще в коде функция
plural, она склоняет строки в завимости от их количества :)🐟 Заказать работу у нас: @namokonov
4👍32🔥17❤6👎1🤡1
Если вы очень не любите Excel... и не любите тех, кто там работает...
эта статья для вас! Парочка приемов оттуда в экселе ваших коллег — и вот уже в офис вызывают экзорциста, а все стремительно переходят на Google Таблицы😈
Розыгрыши в Excel: немного табличного хулиганства (и пользы тоже)
При написании статьи ни один офисный сотрудник не пострадал, все тестировалось только на себе и коте Лемуре.
---
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
эта статья для вас! Парочка приемов оттуда в экселе ваших коллег — и вот уже в офис вызывают экзорциста, а все стремительно переходят на Google Таблицы😈
Розыгрыши в Excel: немного табличного хулиганства (и пользы тоже)
При написании статьи ни один офисный сотрудник не пострадал, все тестировалось только на себе и коте Лемуре.
---
📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
👍10🔥6🍓3❤2👎1🤡1
IMPORTRANGE сломался 🚫
Друзья, наверняка вы видели такую или похожую ошибку, когда пытались загрузить слишком большой диапазон данных с помощью
Иногда и на меньшем объёме данных
Есть решение: делим
Получится что-то вроде:
Но, если фрагментов много, то писать такую формулу руками неудобно.
Напишем же формулу формулой :)
Что здесь происходит?
🔹
🔹
🔹
🔹
🔹
Дополнительные материалы:
Большая статья про
С помощью скрипта даём доступ к Таблицам, чтобы IMPORTRANGE заработал без ручного расшаривания
🐟 Заказать работу у нас: @namokonov
Или результат слишком большой или данные не выводятся вообще
Друзья, наверняка вы видели такую или похожую ошибку, когда пытались загрузить слишком большой диапазон данных с помощью
IMPORTRANGE.Иногда и на меньшем объёме данных
IMPORTRANGE "ломается" и не выводит результат.Есть решение: делим
IMPORTRANGE на небольшими диапазоны (скажем, по 1000 строк) и соединяем их с помощью фигурных скобо {} или VSTACK.Получится что-то вроде:
={
IMPORTRANGE(url;"a1:1000");
IMPORTRANGE(url;"a1001:2000");
IMPORTRANGE(url;"a1:1000")
}
Но, если фрагментов много, то писать такую формулу руками неудобно.
Напишем же формулу формулой :)
=let(
_url;"https://docs.google.com/";
_shName;"Лист1";
_step;1000;
_n;25;
_s;SEQUENCE(_n;1;2;_step);
REDUCE(importrange(_url;_shName & "!1:1");_s;
LAMBDA(_acc;_add1; IFNA(VSTACK(_acc;IFERROR(IMPORTRANGE(_url; _shName & "!" & _add1 & ":" & _add1 + _step - 1)))))))
Что здесь происходит?
🔹
SEQUENCE генерирует стартовые строки: 2, 1002, 2002…🔹
IMPORTRANGE тянет по 1000 строк за раз.🔹
VSTACK складывает всё друг под другом.🔹
REDUCE аккуратно объединяет блоки в единую таблицу.🔹
LET делает формулу читабельной, как будто это вовсе не формула.Дополнительные материалы:
Большая статья про
IMPORTRANGE от нашего маэстро Рената ШагабутдиноваС помощью скрипта даём доступ к Таблицам, чтобы IMPORTRANGE заработал без ручного расшаривания
🐟 Заказать работу у нас: @namokonov
2❤38🔥25👍15🍓3👎1🤡1
Получаем список с отдельными строками для каждой даты каждого этапа — одной формулой
Что тут происходит? Мы задаем функцию f.
На входе она получает один параметр x — в нашей задаче это название этапа.
И делает следующее:
Берет даты на столбец и на два правее от названия этапа (это делает функция СМЕЩ / OFFSET).
Превращает эти даты в последовательность дат от начала и до конца с помощью SEQUENCE. Чтобы не повторять большую конструкцию, называем ее "даты" с помощью функции LET — все это уже внутри нашей "пользовательской" функции f.
Повторяем название этапа с помощью функции MAKEARRAY. Ну а число дат в последовательности считаем через старый добрый СЧЁТ / COUNT.
Соединяем (HSTACK) эти даты с названием этапа, повторенным столько раз, сколько в нем дат:
И далее эту функцию f мы используем. В качестве первоначального аргумента в REDUCE мы отправляем заголовки
{"Название" \ "Дата"}, а далее накапливаем результат: пробегаемся по списку этапов, для каждого получаем таблицу с помощью написанной нами ранее функции f, и добавляем полученные таблицы одна под другой с помощью VSTACK.
Вся формула:
Альтернативное решение:
Ссылка на таблицу с обеими формулами
Что тут происходит? Мы задаем функцию f.
На входе она получает один параметр x — в нашей задаче это название этапа.
И делает следующее:
Берет даты на столбец и на два правее от названия этапа (это делает функция СМЕЩ / OFFSET).
Превращает эти даты в последовательность дат от начала и до конца с помощью SEQUENCE. Чтобы не повторять большую конструкцию, называем ее "даты" с помощью функции LET — все это уже внутри нашей "пользовательской" функции f.
SEQUENCE(СМЕЩ(x;0;2)-СМЕЩ(x;0;1)+1;1;СМЕЩ(x;0;1))
Повторяем название этапа с помощью функции MAKEARRAY. Ну а число дат в последовательности считаем через старый добрый СЧЁТ / COUNT.
MAKEARRAY(СЧЁТ(даты);1;LAMBDA(i;j;x))
Соединяем (HSTACK) эти даты с названием этапа, повторенным столько раз, сколько в нем дат:
HSTACK(MAKEARRAY(СЧЁТ(даты);1;LAMBDA(i;j;x));даты))
И далее эту функцию f мы используем. В качестве первоначального аргумента в REDUCE мы отправляем заголовки
{"Название" \ "Дата"}, а далее накапливаем результат: пробегаемся по списку этапов, для каждого получаем таблицу с помощью написанной нами ранее функции f, и добавляем полученные таблицы одна под другой с помощью VSTACK.
REDUCE({"Название" \ "Дата"};Данные[Название]; LAMBDA(acc;val; VSTACK(acc; f(val)))))
Вся формула:
=LET(f; LAMBDA(x; LET(даты; SEQUENCE(СМЕЩ(x;0;2)-СМЕЩ(x;0;1)+1;1;СМЕЩ(x;0;1)); HSTACK(MAKEARRAY(СЧЁТ(даты);1;LAMBDA(i;j;x));даты)));
REDUCE({"Название" \ "Дата"};Данные[Название]; LAMBDA(acc;val; VSTACK(acc; f(val)))))
Альтернативное решение:
=ARRAYFORMULA(SPLIT(TOCOL( MAP(A2:A4;B2:B4;C2:C4;LAMBDA(a;b;c;a & "#" & ТЕКСТ(ТРАНСП( SEQUENCE(c-b + 1;1;b));"dd.mm.yyyy")));1);"#"))
Ссылка на таблицу с обеими формулами
🔥6👍5❤2👎1🤡1
🚀 Курс от авторов и модераторов канала @google_sheets: Скрипты и Формулы в Google Таблицах
Курс для тех, кто ежедневно работает в Таблицах и хочет делать свою работу быстрее и проще.
Если вы давно хотели уверенно владеть формулами и функциями, автоматизировать рутину и начать писать скрипты на "вайб-кодинге": это ваш поток.
Что вас ждёт
• 13 уроков по 1.5–2 часа
• Два занятия в неделю
• Домашние задания после каждого урока
• Личные чатики с поддержкой и ответами на ваши вопросы по Таблицам
• Записи уроков остаются у вас навсегда
• Исходные и готовые таблицы со всеми примерами и дополнительные материалы
• Индивидуальная обратная связь от лектора по каждому выполненному заданию — в формате скринкаста
Формулы:
от базы и логики до ПРОСМОТРX, массивов, LET, LAMBDA и собственных функций.
Скрипты:
автоматизация рутины, onEdit / onOpen / onChange, интеграции по API, генерация из Таблицы договоров в PDF, работа с файлами, подключение ИИ и разбор реальных кейсов.
Сейчас стоимость курса 45 000. дальше стоимость будет увеличиваться.
Можно оплатить со счёта компании, мы сделаем чек.
Чтобы задать вопросы и присоединиться, напишите в личку @namokonov.
Курс для тех, кто ежедневно работает в Таблицах и хочет делать свою работу быстрее и проще.
Если вы давно хотели уверенно владеть формулами и функциями, автоматизировать рутину и начать писать скрипты на "вайб-кодинге": это ваш поток.
Что вас ждёт
• 13 уроков по 1.5–2 часа
• Два занятия в неделю
• Домашние задания после каждого урока
• Личные чатики с поддержкой и ответами на ваши вопросы по Таблицам
• Записи уроков остаются у вас навсегда
• Исходные и готовые таблицы со всеми примерами и дополнительные материалы
• Индивидуальная обратная связь от лектора по каждому выполненному заданию — в формате скринкаста
Формулы:
от базы и логики до ПРОСМОТРX, массивов, LET, LAMBDA и собственных функций.
Скрипты:
автоматизация рутины, onEdit / onOpen / onChange, интеграции по API, генерация из Таблицы договоров в PDF, работа с файлами, подключение ИИ и разбор реальных кейсов.
Сейчас стоимость курса 45 000. дальше стоимость будет увеличиваться.
Можно оплатить со счёта компании, мы сделаем чек.
Чтобы задать вопросы и присоединиться, напишите в личку @namokonov.
3🔥16❤7😱3👎1🤡1🍓1
Google Таблицы
🚀 Курс от авторов и модераторов канала @google_sheets: Скрипты и Формулы в Google Таблицах Курс для тех, кто ежедневно работает в Таблицах и хочет делать свою работу быстрее и проще. Если вы давно хотели уверенно владеть формулами и функциями, автоматизировать…
Media is too big
VIEW IN TELEGRAM
Суммируем по цвету: простой скрипт плюс формула =SUMIF 🎨📊
В Google Таблицах до сих пор нет встроенной возможности суммировать по цвету ячеек, но это не проблема.
Напишем маленький скрипт - пользовательскую функцию - и свяжем ее с формулой
В видео показываю пошагово, как настроить решение и как оно будет работать на ваших данных.
Сам скрипт выложу в комментариях под постом, забирайте.
🚀 Хотите не только повторить примеры с канала, но и системно прокачать навыки?
Курс
• для тех, кто каждый день работает в Таблицах
• для тех, кто хочет автоматизировать рутину
• для тех, кто давно смотрит на Apps Script, но "потом"
📎 Сейчас стоимость 45 000, ближе к старту будет увеличиваться
В Google Таблицах до сих пор нет встроенной возможности суммировать по цвету ячеек, но это не проблема.
Напишем маленький скрипт - пользовательскую функцию - и свяжем ее с формулой
=SUMIF, чтобы всё заработало.В видео показываю пошагово, как настроить решение и как оно будет работать на ваших данных.
Сам скрипт выложу в комментариях под постом, забирайте.
🚀 Хотите не только повторить примеры с канала, но и системно прокачать навыки?
Курс
• для тех, кто каждый день работает в Таблицах
• для тех, кто хочет автоматизировать рутину
• для тех, кто давно смотрит на Apps Script, но "потом"
📎 Сейчас стоимость 45 000, ближе к старту будет увеличиваться
❤11🔥8
Наш маленький гайд по работе с заказчиками
Друзья, у нас в сообществе много фрилансеров. Фриланс отличается от найма тем, что клиентов можно выбирать. Пользуйтесь этим.
Мы с нашей небольшой командой уже 8 лет делаем задачи на заказ.
Сегодня напишем советы про клиентов, которых лучше избегать, чтобы сохранить время и хорошее настроение:
🚫 Клиент, отрицающий ТЗ как факт 😀
Когда вам пишут (реальная цитата): "ТЗ писать не буду, если я напишу ТЗ, то зачем вы мне нужны, я сам все сделаю".
Есть промежуточные варианты, когда ТЗ выглядит как набор войсов, если вам так комфортно работать, вы немного телепат, то вариант, пробуйте.
🚫 Клиент, знающий все лучше вас
Ваши советы по разработке не слушают и говорят что-то вроде: "Вот я тут с ИИ два месяца посидел и хорошо научился во всем разбираться, сейчас я с Таблицами на ты и поэтому делайте как я скажу".
🚫 Клиент, помогающий вам с помощью ИИ
Встречается особенно в последнее время. ChatGPT дает обманчивую возможность написать код через промпт, но сейчас это все еще часто получается сыровато. Клиент вдохновляется, сам вставляет код, а код, к примеру, запрашивает данные из API и вставляет их по одной строке поочередно.
Работает в целом? Да. Плохо написано? Тоже да 🙂
И тут у вас вилка - бодаться со вставленным кодом, править его, а потом есть шанс услышать, а зачем было потрачено время, я же уже все сделал.
Ну и пара полезных лайфхаков
✅ Фиксируем скоуп задач и просим подтердить его клиента
Когда договорились о наборе задач, непременно зафиксируйте его где-то, можно прямо сообщением в телеграме. И напишите "делаем конкретно вот это за такую сумму, все верно?
Это поможет вам в случаях, когда вы сделали, а заказчикам пришли новые идеи, требуюших больших изменений и они просят их сделать без доплаты.
✅ Всегда берите аванс
Чаще всего все платят, но если вы начнете работать, а к клиенту вернется его старый программист или он откроет в себе возможности писателя кода через ИИ или он проиграет все на ставке, вы получите плохие эмоции из-за потраченноего времени.
✅ Берите запас по срокам реализации.
Не ставьте, кроме очень уж простых задач короткие сроки, вот это вот "сделаю до завтра", оно достаточно опасно, всегда стоит взять небольшой запас время на всякий случай. Сделаете быстрее - отлично, что-то случится - у вас будет запас.
✅ Если компания хочет заплатить как юрлицо
В 90 % случаев достаточно статуса самозанятого. Оформляется он очень просто в приложении: счет выставляется через приложение, клиент платит на вашу карту как физлица, а после оплаты вы формируете чек и отправляете его.
Если компания просит договор или акт, а вы такого ни разу не делали, просто поищите в интернете похожий договор на предоставление услуг разработки, выкиньте лишние пункты, подпишитесь прямо на компьютере, сохраните как PDF и отправьте. Чаще всего этого хватает, сейчас подписывать договор через электронный документооборот просят редко.
✅ Новые задачки для себя
Если есть возможность сделать то, что вы уже делали, и немножко залезть в новую сферу, выбирайте новое. Штамповать то, что вы умеете, может быть и денежно, но достаточно быстро наскучивает и приводит к выгоранию.
✅ Если можно избежать созвона - избегайте
Зачастую в переписке за 5 минут вы получите всю информацию, которую вам будут рассказывать на созвоне.
Но тут есть исключения: некоторым сложно в переписке, и вот тут лучше созвониться, чем задавать 150 вопросов 🙂
Друзья, всем удачи, хороших клиентов и интересных задач, ну и не бойтесь отказывать людям, если чувствуете сомнения и вам с ними работать некомфортно или задача неинтересна, вы не в найме, у вас есть эта опция.
💡 А вы с какими "красными флагами" сталкивались? Напишите в комментах, добьем список.
Друзья, у нас в сообществе много фрилансеров. Фриланс отличается от найма тем, что клиентов можно выбирать. Пользуйтесь этим.
Мы с нашей небольшой командой уже 8 лет делаем задачи на заказ.
Сегодня напишем советы про клиентов, которых лучше избегать, чтобы сохранить время и хорошее настроение:
🚫 Клиент, отрицающий ТЗ как факт 😀
Когда вам пишут (реальная цитата): "ТЗ писать не буду, если я напишу ТЗ, то зачем вы мне нужны, я сам все сделаю".
Есть промежуточные варианты, когда ТЗ выглядит как набор войсов, если вам так комфортно работать, вы немного телепат, то вариант, пробуйте.
🚫 Клиент, знающий все лучше вас
Ваши советы по разработке не слушают и говорят что-то вроде: "Вот я тут с ИИ два месяца посидел и хорошо научился во всем разбираться, сейчас я с Таблицами на ты и поэтому делайте как я скажу".
🚫 Клиент, помогающий вам с помощью ИИ
Встречается особенно в последнее время. ChatGPT дает обманчивую возможность написать код через промпт, но сейчас это все еще часто получается сыровато. Клиент вдохновляется, сам вставляет код, а код, к примеру, запрашивает данные из API и вставляет их по одной строке поочередно.
Работает в целом? Да. Плохо написано? Тоже да 🙂
И тут у вас вилка - бодаться со вставленным кодом, править его, а потом есть шанс услышать, а зачем было потрачено время, я же уже все сделал.
Ну и пара полезных лайфхаков
✅ Фиксируем скоуп задач и просим подтердить его клиента
Когда договорились о наборе задач, непременно зафиксируйте его где-то, можно прямо сообщением в телеграме. И напишите "делаем конкретно вот это за такую сумму, все верно?
Это поможет вам в случаях, когда вы сделали, а заказчикам пришли новые идеи, требуюших больших изменений и они просят их сделать без доплаты.
✅ Всегда берите аванс
Чаще всего все платят, но если вы начнете работать, а к клиенту вернется его старый программист или он откроет в себе возможности писателя кода через ИИ или он проиграет все на ставке, вы получите плохие эмоции из-за потраченноего времени.
✅ Берите запас по срокам реализации.
Не ставьте, кроме очень уж простых задач короткие сроки, вот это вот "сделаю до завтра", оно достаточно опасно, всегда стоит взять небольшой запас время на всякий случай. Сделаете быстрее - отлично, что-то случится - у вас будет запас.
✅ Если компания хочет заплатить как юрлицо
В 90 % случаев достаточно статуса самозанятого. Оформляется он очень просто в приложении: счет выставляется через приложение, клиент платит на вашу карту как физлица, а после оплаты вы формируете чек и отправляете его.
Если компания просит договор или акт, а вы такого ни разу не делали, просто поищите в интернете похожий договор на предоставление услуг разработки, выкиньте лишние пункты, подпишитесь прямо на компьютере, сохраните как PDF и отправьте. Чаще всего этого хватает, сейчас подписывать договор через электронный документооборот просят редко.
✅ Новые задачки для себя
Если есть возможность сделать то, что вы уже делали, и немножко залезть в новую сферу, выбирайте новое. Штамповать то, что вы умеете, может быть и денежно, но достаточно быстро наскучивает и приводит к выгоранию.
✅ Если можно избежать созвона - избегайте
Зачастую в переписке за 5 минут вы получите всю информацию, которую вам будут рассказывать на созвоне.
Но тут есть исключения: некоторым сложно в переписке, и вот тут лучше созвониться, чем задавать 150 вопросов 🙂
Друзья, всем удачи, хороших клиентов и интересных задач, ну и не бойтесь отказывать людям, если чувствуете сомнения и вам с ними работать некомфортно или задача неинтересна, вы не в найме, у вас есть эта опция.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤11🍓3