Telegram Web Link
Запись экрана 2025-04-21 в 09.37.38.mov
164.9 MB
onOpen - Ликвидатор


Используем простой скрипт onOpen (не треюущий авторизации!) удаляем все лишние листы, которые засоряют Таблицу и которые создали нерадивые сотрудники :)


Таблица с простым простым скриптом
всеформатирующий onEdit.mov
641.6 MB
onEdit(), который поправит косяки за другими

Друзья, бывало ли у вас такое, что вы делали Таблицу, старались, а потом набегают коллеги и быстренько ломают все форматы, выравнивания и тому подобное?

Мы продолжаем тему простых триггеров и показываем, как автоматически это можно решить с помощью скрипта onEdit().

🍉 А еще, в конце видео задание, первые трое верно ответивших получат +15 кармы в нашем чудесном чатике, который почти приблизился к 7000 учатников

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


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Бот глупых шуток – видео, в котором показываю, как разверуть бота с нуля

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

Угадайте, какую важную роль выполнял chatgpt? Ну, конечно же, создавал список шуток, с остальным удалось справиться самостоятельно.

В видео я подробно рассказал про
— создание и редактирование бота в @botFather
— как развернуть бота как веб-приложение
– как создать вебхук, в котором мы соединяем токен бота и ссылку на наше веб-приложение;
– и коротко пробежался по небольшому коду


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

Создать бесплатный сервер на базе бесплатного аккаунта gmail, развернуть его в Таблице или Документе, чтобы сервер 24/7 смотрел в сеть? ЛЕГКО! :)


🍉🍉 Наш платный курс по телеграм ботам подошел к концу и поэтому в мае запускаю личное обучение по прграммированию, следите за анонсами. Попозже расскажу про темы и формат.

Ну и код бота

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Собираем данные в виде ФИО+телефон по сотрудникам компании в одной ячейке

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

Многие в такой ситуации вводят всю информацию в одну ячейку руками, благо можно переходить на следующую строку в ячейке с помощью Alt+Enter.

Но лучший путь - это создать отдельно реестр контактных лиц, где выбирать компанию из выпадающего списка (чтобы не было возможности ошибиться) и вводить в каждой отдельной строке одного человека с его контактами и другими нужными вам полями.
Тогда будет возможность фильтровать такой список, форматировать телефоны, создавать ссылки на адреса эл. почты и иначе взаимодействовать с этими данными.
А собрать и подтянуть данные по всем сотрудникам одной компании всегда можно с помощью QUERY или FILTER. Если нужно отформатировать при этом данные - например, номера телефонов - пригодится функция ТЕКСТ / TEXT.

Файл с примерами


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Удаляем лишние проекты из нашей Таблицы

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

Именно новый проект, а не лист в проекте.

Показываем как избавиться от лишних проектов внутри одной Таблицы / Документы / где вы их еще сможете создать с помощью веб-интерфейса.

В следуюших уроках коснемся работы со скриптами используя script api, удалять / изменять скрипт с помощью скрипта - что может быть прекраснее :)
Google Таблицы
Бот глупых шуток – видео, в котором показываю, как разверуть бота с нуля Друзья, сделали с помощью chatgpt телеграм бота, который выводит случайную глупую шутку из 200 предварительно созданных. Угадайте, какую важную роль выполнял chatgpt? Ну, конечно же…
Media is too big
VIEW IN TELEGRAM
Улучшаем нашего бота, добавляем еще одну команду (а также поясняем за отображение объекта / массива в Logger.log)

Друзья, c помощью Logger.log можно вывести объект превращенный в строку


const obj = { a: 1, b: 2 };
Logger.log(JSON.stringify(obj));

//{"a":1,"b":2}


Но, можно добавить аргументов и эту строку (которая на самом деле объект) преобразовать в читабельный вид


const obj = { a: 1, b: 2 };
Logger.log(JSON.stringify(obj, 0, 2));

//{
// "a": 1,
// "b": 2
//}



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

~
1) бота можно попробовать @google_sheets_bad_jokes_bot

2) Весь код здесь

3) Как зарегистрировать бота и все развернуть самостоятельно здесь

🍍 Скоро мы анонсируем свой курс по программированию, будут либо личные встречи / уроки, либо небольшие группы.

Коснемся и азов и работы с API и ботов. Формулы, конечно, писать здорово, но вы можете научиться большему и упростить свой рабочий день в офисе.

Stay tuned 🙂

PS Logger.log, console.log, JSON.stringify, JSON.parse
Smart Fill: подсказки с формулами

Google Таблицы могут предлагать формулы для преобразования данных.

Введите несколько значений и получите предложение от таблиц — очень похоже на другой Fill, а именно Flash Fill в Excel (Мгновенное заполнение). Но на самом деле они принципиально отличаются: в Excel мгновенное заполнение дает статичные значения, а в Google Smart Fill — формулы. Так что это скорее похоже на "Столбец из примеров" (Column from Examples) внутри Power Query в Excel.
Правда, формулы могут быть довольно длинные, то есть не ждите использования LET для ссылки на повторяющиеся значения или каких-то изяществ. Например, чтобы превратить полное ФИО в И. О. Фамилия предлагается такая формула🤯:

=СЦЕПИТЬ(ПСТР(A3;НАЙТИ(" ";A3) + 1;НАЙТИ(" ";A3) + 1 - (НАЙТИ(" ";A3)));".";ПСТР(A3;НАЙТИ(СИМВОЛ(160);ПОДСТАВИТЬ(A3;" ";СИМВОЛ(160);2)) - 1 + 1;НАЙТИ(СИМВОЛ(160);ПОДСТАВИТЬ(A3;" ";СИМВОЛ(160);2)) + 1 - (НАЙТИ(СИМВОЛ(160);ПОДСТАВИТЬ(A3;" ";СИМВОЛ(160);2)) - 1));". ";ЛЕВСИМВ(A3;НАЙТИ(" ";A3) - 1))


Сочетание клавиш: Ctrl + Shift + Y. Либо просто введите несколько примеров и дождитесь появления подсказки, в которой можно либо сначала посмотреть формулу (функции будут на английском, даже если у вас в таблице они на русском), либо сразу ее ввести и уже потом смотреть в ячейках (уже на вашем языке).


📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Media is too big
VIEW IN TELEGRAM
Парсим текст с сайта скриптами, оставляем только нужное и, внимание, собираем акростих!

🍉 И наконец анонс нашего курса по программированию


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

Берём текст случайного стихотворения с https://www.culture.ru/, избавляемся от лишних тегов и спецсимволов, оставляем только текст — и как бонус: если это акростих, собираем его из первых букв строк!

Сам скрипт, код

🍉 И друзья, мы начинаем набор наш курс по программированию

- занятия в маленьких группах (до 4–5 человек)
- возможно обучение с нуля: с аргументов, циклов и базовой логики
- доходим до работы с API (WB, Ozon и др.), создаём Telegram-ботов
- из Google Таблиц собираем документы, превращаем их в PDF и рассылаем в чаты
- если кто-то не успевает — договариваемся о созвоне, подсказываем и показываем


Стоимость — 100 000 рублей. Продолжительность — 2–3 месяца (в зависимости от вашей цели).

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

Пишите @namokonov — с радостью отвечу на любые вопросы!
Курс Евгения Намоконова (автор @google_sheets) по полезному программированию на Google Apps Script и Google Таблицах
(старт в конце мая 2025)

На курсе не грузим теорией. Учим тому, что реально используют на работе — и за что платят заказчики:

Автоматизация Google Таблиц, Документов, Диска, Почты и Календаря
Подключение к внешним API и загрузка данных напрямую в Таблицы
Парсинг сайтов
Скрипты, которые создают отчёты на основе формул

Только практические кейсы — никаких «абстрактных задачек».

🚀 Про курс — коротко:

1. 💸 Стоимость — 100 000 ₽
2. 👥 Маленькие группы
3. 🖥 Онлайн-занятия 2 раза в неделю + записи
4. 💬 Чат участников
5. 📆 Длительность — 1,5–2 месяца
6. 🎯 Наша цель — *реально научить*

Вопросы и бронь, оплата — @namokonov, @elizaveta_sh_komarova
🌪 Стартуем скоро!
Google Таблицы
Парсим текст с сайта скриптами, оставляем только нужное и, внимание, собираем акростих! 🍉 И наконец анонс нашего курса по программированию Друзья, недавно у нас спросили, как достать баланс пользователя с сайта. Там требовалась авторизация, поэтому мы решили…
Почему учиться скриптам стоит именно у нас?

В трёх пунктах:

🍉 7 лет опыта автоматизации — мы настраивали процессы для самых разных бизнесов: от компании по выгулу собак в Петербурге до китайского такси-гиганта Didi в Google Таблицах и GAS-скриптах.

Забавно, но даже в Яндексе, где я работал в "отделе эффективности платформы" (на тот момент) активно использовали Google Таблицы и скрипты

👥 Поддержка от живой команды — вы не будете одни: наши кураторы рядом на всём пути — во время курса и после него, в закрытом чате.

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

PS Программирование с нуля — это возможно. Хотите зарабатывать без офиса "на берегу океана" – возможно,  только помните, работать на пляже — так себе идея, песок быстро убивает ноутбук :)

Чтобы научиться нужно всего два ресурса — желание и надёжные наставники. С первым — к вам, со вторым — к нам.


Пишите @namokonov — с радостью отвечу на любые вопросы!
Друзья, пост от нового модератора чата Алексей 𝕆𝕕𝕪𝕤𝕤𝕖𝕦𝕤, спасибо ему

ОГЛАВЛЕНИЕ таблицы (со ссылками на каждый лист) ФОРМУЛОЙ 😍

⚠️ Главное условие. Таблица должна быть открыта для просмотра.
ИМХО. Страшного в этом ничего нет, т.к. случайно угадать 40 символов URL крайне маловероятно. Можно даже опубликовать таблицу, тогда количество символов в URL увеличится в 2 раза 😉

🟢 Получаем список листов (sheetNames)
=IMPORTXML(SS_URL_with_htmlview; "//ul[@id='sheet-menu']/li")


🔵 Получаем идентификаторы листов (sheetIDs)
=IMPORTXML(SS_URL_with_htmlview; "//div[@id='sheets-viewport']/div/@id")


🔴 Создаём гиперссылки из списка листов и их GID:
=ArrayFormula(HYPERLINK("#gid="&sheetIDs; sheetNames))


🔶Пример с подробным описанием
Про курс по программированию, подробно

Друзья, много вопросов в лс приходит про наш курс, так вот, слушайте 🙂

---
0. 🚀 Начало уроков в 11 Мск

1. 📚 Два урока в неделю по 90 минут (45 минут, короткий перерыв и еще 45 минут)

2. Три недели обучения

3. 👯‍♀️ Отдельный чат с нами и с группой для обсуждения вопросов когда угодно, чат будет доступен и после курса

4. 👥 Планируем сформировать 2 группы:
* 🐣 Новички
* 🧠 Advanced

5. 🍍 Ну и конечно же будут доступны записи всех уроков

---

### 🐣 Для новичков:

Изучаем азы программирования:

* переменные и аргументы
* массивы и объекты
* циклы, логирование
* работа с документацией
* простая работа с таблицами, документами, диском, почтой
* базовые fetch-запросы

---

### 🧠 Для Advanced:

* подключение к внешним API и автоматическая загрузка данных (например, из Wildberries по ключу продавца)
* парсинг сайтов
* работа с таблицами через Sheets API
* продвинутая работа с таблицами, документами, диском, почтой

---

### 💼 Дополнительная практика:

Самых активных студентов мы будем подключать к реальным заказчикам.
Под нашим руководством вы пройдёте путь:

* от понимания ТЗ
* через оценку задачи
* до реализации и сдачи результата и получения денег

---

🎯 В результате, если вы действительно будете учиться, то сможете автоматизировать:

* Google Таблицы
* Gmail
* Google Календарь
* Google Документы
* Google Диск
* Научиться работать с разными API, забирать и отдавать данные


---

Стоимость - 100 000 рублей, по любым вопросам, а также деталям оплаты пишите Елизавете @elizaveta_sh_komarova
Спарклайн для сводной таблицы: выделяем цветом значения выше среднего, исключаем общий итог

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

Ее логика:
Если в столбце с подписями (A в примере) пусто или "Итого" — возвращаем пустоту, ибо там спарклайн не нужен.

Если не пусто — вставляем спарклайн. Максимальное значение — это второе по величине значение в столбце, где область значений (ибо общий итог не нужно учитывать, он априори больше всех остальных значений, если у вас функция суммирования SUM в поле, а не среднее или максимум, допустим). Это функция НАИБОЛЬШИЙ / LARGE с аргументом 2.

Если хочется спецэффектов (надо красить все значения выше среднего или выше заданного уровня отдельным цветом), color1 спарклайна задаем через функцию ЕСЛИ / IF — проверяем условие (например, что значение больше среднего без учета итога) и получаем разные цвета.

В общем виде:

=MAP(столбец подписей;столбец значен
LAMBDA(a;b;
ЕСЛИ (ИЛИ(a="Итого";ЕПУСТО(a));"";
SPARKLINE(b;{"Charttype" \ "bar" ; "max" \ НАИБОЛЬШИЙ($B$2:$B;2) ; "color1" \ ЕСЛИ(b>среднее, уровень или другое условие; первый цвет ; второй цвет) }))))


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

Это один из примеров нового курса "Сводные таблицы Google Spreadsheets". Курс можно найти по ссылке. Открытый видеоурок из курса — тут.

⭐️ Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
🗣Стихотворение превращенное в скрипт 😃

Привет! Есть у музыканта Дельфина грустное стихотворение, приведем его целиком:


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


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

Как это стихотворение можно написать с помощью Google Apps Script?


function дельфин() {
let щенок = Array(100); //объявляем щенка как массив из 100 элементов
let любовь = 0; //объявляем любовь равной нулю

console.log('сумма любви к щенку', любовь); //сумма любви к щенку 0
console.log('остаток щенка', щенок.length); //остаток щенка 100

console.log('--- цикл ---');

while (щенок.length) { //объявляем цикл, который действует, пока у массива щенок остается длина
любовь += щенок.length; //увеличиваем каждую итерацию цикла нашу любовь на оставшуюся длину щенка
щенок = щенок.slice(1); //уменьшаем массив щенок на один элемент
};

console.log('сумма любви к щенку', любовь); //сумма любви к щенку 5050
console.log('остаток щенка', щенок.length); //остаток щенка 0
};


🚀 Друзья, программирование можно изучать на любых примерах, а еще мы проводим курс (набираем очень маленькие группы – личный подход к каждому), все детали здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
onEdit, возвращающий email автора? (на бесплатных аккаунтах)

Друзья, короткое видео с загадкой.

Предположите, как работает решение и почему onEdit, которому не положено возвращать email пользователя - все таки его возвращает.

Пишите в комментарии.

PS На workspace-аккаунтах проблем с возвратов почт нет, там можно все делать без ухищрений.
Google Таблицы
onEdit, возвращающий email автора? (на бесплатных аккаунтах) Друзья, короткое видео с загадкой. Предположите, как работает решение и почему onEdit, которому не положено возвращать email пользователя - все таки его возвращает. Пишите в комментарии. PS…
onEdit, возвращающий email автора - разгадка

Друзья, спасибо за варианты.

Решение такое - делаем отдельные защищенные диапазоны для каждого возможного автора таблицы и в названии диапазона пишем его email.

Далее в onEdit() просто перебираем эти диапазоны, если человек может редактировать диапазон - то берем название диапазона (в которое мы написали email автора) и вставляем как примечаение в ячейку

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

function onEdit(e) {
const ss = e.source;
if (ss.getSheetName() == '()') {
return;
};

const email = check(ss);
e.range.setNote(email);
};


function check(ss) {
const sheet = ss.getSheetByName('()');
const pr = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);

for (let i = 0; i < pr.length; i++) {
const p = pr[i];
if (p.canEdit()) {
Logger.log(p.getDescription());
return p.getDescription();
};
};
};

Идея читателя нашешо чата @m_maker85

📗 Канал и Чат
📕 Оглавление канала
🏄 Заказ работы у нас
Задачка для подписчиков

Друзья, привет! Всех с началом новой недели.

У нас для вас есть небольшая задачка - сделайте классическую, таблицу умножения от 1 * 1 до 9 * 9, реализовать можно как формулами, так и скриптами.

То, что получится - пишите в комментарии или в наш чат @google_spreadsheets_chat

🚀 В следующем посте покажу свой вариант с помощью скриптов.
Media is too big
VIEW IN TELEGRAM
Что вы конкретно получите на нашем курсе по разработке на Таблицах, пример

Показываю в видео два примера обращения к API OZON
— получает токен
— получаем по этому токену рекламные кАмпании, берем из них отдельные элементы и вставляем всё в Таблицу

Таблица с кодом

На нашем курсе не грузим теорией. Учим тому, что реально используют на работе — и за что платят заказчики:

Автоматизация Google Таблиц, Документов, Диска, Почты и Календаря
Подключение к внешним API и загрузка данных напрямую в Таблицы
Парсинг сайтов
Скрипты, которые создают отчёты на основе формул

Только практические кейсы — никаких «абстрактных задачек».

🚀 Про курс — коротко:

1. 💸 Стоимость — 100 000 ₽
2. 👥 Маленькие группы
3. 🖥 Онлайн-занятия 2 раза в неделю + записи
4. 💬 Чат участников
5. 📆 Длительность — 1,5–2 месяца
6. 🎯 Наша цель — *реально научить*

Вопросы и бронь, оплата — @namokonov, @elizaveta_sh_komarova
🌪 Стартуем скоро!
2025/06/28 18:15:52
Back to Top
HTML Embed Code: