SensaiKudisai

SensaiKudisai

https://t.me/sigmadice
Пикабушник
3471 рейтинг 827 подписчиков 3 подписки 34 поста 31 в горячем
Награды:
5 лет на Пикабу
738

Мануал по гугл таблицам

Привет, дорогие чатлане!

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


Немного информации о том, что считается базовым уровнем (по крайней мере у нас в компании):

1. Показать пару вариантов применения функции ВПР, где 4 параметром задано значение 1 (TRUE) и знать за что этот  параметр отвечает.

2. В записи "Стар Стафф" за одну формулу поменять местами слова и получить "Стафф Стар".

3. Построить сводную таблицу на основании данных из нескольких других таблиц (технически это отдельные доки).

4. Подсветить названия строк, в которых есть хотя бы одно отрицательное значение.


Н.Б. Сейчас речь не идет о широком использовании этих кейсов или вопросов типа "А где мне пригодиться это в быту?". Речь идет только о технических знаниях. Если дорогой чатланин знает техническую часть - скорее всего он найдет где это ему нужно и сможет применить на практике.

Показать полностью
316

Подключение телеграм бота к гугл табличкам - обновленный пост (GS3)

Всем ку

Комбинация из ТЛГ и ГТ, простота подключения КМК делает из ГТ офигенный инструмент автоматизации.

Тайм-менеджмент, таск-менеджмент, учёт финансов, объявления, пересылка событий - всё это создается и довольно быстро настраивается. Главное - это становится полезным не только в бизнесе, но и для обычных чатлан.

Пост ориентирован прежде всего на людей, которые только познают ГТ и на первых порах не требует знания гугл скриптов. В этом посте будет только первичная настройка и подключение. В следующих постах рассмотрю всё что описал выше (как трекать время, задачи, финансы и т.д. и как это настроить под себя).

Для начала находим отца всех ботов @botfather в телеге.

После старта бота botftaher выведет список команд. Здесь нам интересна команда создания нового бота /newbot.

Порядок очень простой: создать бота, назвать его человеческим языком, задать ему username. В результате получаем API токен нашего бота (1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk). Он-то нам и нужен.

Теперь переходим к гугл таблице. Создаем новую таблицу, переходим в пункт меню Инструменты/Tools -> Редактор скриптов/ Script editor.

Должно получиться вот это:

Затираем дефолтный код и вставляем следующий скрипт:


const API_TOKEN = '1860347610:AAH1q6eqTPnVh0qe6mQWidNSTELcprXEfOk'

const DOC = SpreadsheetApp.openById(‘10W0T9eOP_NN_6g4qyEJzWjm4nkKRN2vyUOnpx73f-N0’);

function doPost(e) {

var update = JSON.parse(e.postData.contents);

//нам нужен только тип "сообщение"

if (update.hasOwnProperty('message')) {

var msg = update.message;

var chat_id = msg.chat.id;

var text = msg.text;

var msg_array = msg.text.split(" ");

var date = (msg.date/86400)+25569.125;

var user = msg.from.username;

if (msg_array[0] == "/hello") {

send("Hello World", chat_id)

}

}

}

function send (msg, chat_id) {

//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку

var payload = {

'method': 'sendMessage',

'chat_id': String(chat_id),

'text': msg,

'parse_mode': 'HTML'

}

var data = {

"method": "post",

"payload": payload

}

UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);

}


Обращаем внимание на переменные DOC и API_TOKEN (выделено жирным). Значения переменных необходимо исправить на ваши значения.


Таким образом:

1) меняем ID гугл таблицы (находится в строке адреса после /d/)

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

Круто! Львиная доля работы уже проделана.

Следующим важным моментом является регистрация вебхука (webhook).

Добавим следующий код к нашему скрипту:


function api_connector () {

const App_link = "";

UrlFetchApp.fetch("https://api.telegram.org/bot"+API_TOKEN+"/setWebHook?url="+App_link);

}


Переменную App_link пока оставляем пустой. Следующий шаг - это генерация значения для нее.


Сохраняем наш код и кликаем Deploy.

В открывшемся окне кликаем по шестеренке и выбираем Web app

В поле Who has access выбираем Anyone

И кликаем Deploy.


При первом запуске приложение попросит авторизации. Проделываем это упражнение.


Получаем следующее:

Здесь нам нужен URL в самом конце. Копируем его и вставляем в качестве значения переменной App_link.


Теперь функция должна выглядеть следующим образом:


function api_connector () {

const App_link = "https://script.google.com/macros/s/AKfycbznvI6P0sc4vrIm7GW6C...";

UrlFetchApp.fetch("https://api.telegram.org/bot"+API_TOKEN+"/setWebHook?url="+App_link);

}


Снова сохраняем код и запускаем функцию api_connector:

И наконец переходим к боту в телеге! Запускаем, отправляем команду /hello и видим результат.

Теперь подробно по коду. В коде всего 3 функции:


doPost(e)

send (msg, chat_id)

api_connector ()


doPost - это стандартная функция при работе с телеграм ботами, в которую зашиваются ответные действия от бота при отправке сообщения в чат с ним.

В нашем случае, если мы отправляем команду /hello, бот отвечает Hello World, вызывая функцию send. Это все его действия.


send - функция, которая непосредственно осуществляет отправку сообщения в чат. Функция имеет параметры msg (текст сообщения) и chat_id (ид чата, в который осуществляется отправка).


api_connector - функция подключения вебхука

Показать полностью 16
267

Парсинг данных с сайтов в гугл таблички  (GS1)

Шалом, комрады.

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

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

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

С прелюдией всё, переходим к мясу.

У ГТ есть замечательнейшая функция =importxml(), которая позволяет забирать данные с сайтов, т.е. парсить эти самые сайты. Функционал её ограничен и полноценного парсера в ГТ не сделать по двум причинам:

1. Оно не может парсить данные с сайтов, где необходима авторизация.

2. Оно имеет техническое ограничение на кол-во попыток парсинга, т.к. вход на сайт парсер осуществляет с одного и того же IP. Если на сайте установлено ограничение на кол-во заходов в минуту (а его специально ставят против парсеров), то работать он будет, но будет это крайне медленно.

Итак, к самой функции.

Покажу на двух примерах - КиноПоиск и Авито.

Я очень люблю ужастики, поэтому работать будем с ними :3

Заходим на кинопоиск и исследуем конкретный элемент:

На сайтах похожие элементы чаще всего имеют одинаковый класс внутри тега div, span или a. Технически грузить не буду, достаточно навести мышкой на кусок когда и нужный элемент будет подсвечен. Нам нужен тег и его класс. Т.е. div и 'info'.

Дальше заходим в ГТ и пишем следующее:

=importxml("https://www.kinopoisk.ru/s/type/film/list/1/order/rating/m_a..." ; "//div[@class='info']")

Первый аргумент функции - ссылка на сайт. Второй - запрос на языке Xpath, который ведет к заветному div с классом 'info'. На выходе получаем:

Аналогично для авито:

Формула: =importxml("https://www.avito.ru/moskva?q=пикабу","//div[@class='snippet-title-row']")

Итог:

Ссылка на док: https://docs.google.com/spreadsheets/d/1WvGYnynJkX2srI1G1DD-...


Вот и все на сегодня) Пост первый, так что жду критики и советов, чтобы следующий контент материал был более читабельным и полезным)

Показать полностью 8
186

Автоматически расширяющаяся таблица (GS9)

Привет, дорогие чатлане!

Сегодня немного наркомании, но эта штука мне сильно пригодилась когда мне нужно было собрать по 70 параметров по 100+ клиентам компании.

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

Нам потребуется три листа.

1 - реестр

2 - промежуточный свод

3 - итоговая таблица

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

Реестр у нас должен выглядеть следующим образом:

Т.к. в ГТ отсутствуют умные таблицы из экселя, то нумератор (столбец A) автоматизируем своими руками.

Сделаем несколько тестовых записей:

Теперь нам нужен свод, где будут строки с названиями фильмов (столбец С), столбцы - параметры (столбец D) и на их пересечении - максимальное значение из столбца А.

Так выглядят настройки сводной таблицы.

Н.Б. Создание сводной таблицы - выделить таблицу с исходными данными, потом нажать Данные / Сводная таблица (Data / Pivot Table). Создавать лучше на новом листе.


Этот свод будет выполнять роль подложки. Здесь же с помощью фильтром мы можем фильтровать по дате.

Теперь же нужна лицевая сторона этой таблички. Тут все просто - нам нужен ВПР данных из реестра по данным из свода.


Н.Б. Если мы пишем на одном листе (Лист1) формулу, которая будет ссылаться на ячейки из другого листа (Лист2), то при копировании формулы в соседние ячейки - ссылка так же будет двигаться.


Шаг первый - копируем первый столбец из свода.

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

Аналогично переносим верхнюю шапку.

Шаг второй - прописываем ВПРы и копируем их на всю таблицу.

Н.Б. Таблица 'Реестр'!A:E написана с абсолютными ссылками. Т.о. при копировании эта часть формулы не будет изменяться.

Промежуточный вид таблицы.

Чтобы убрать ошибки при пустых значениях используем функцию ЕСЛИОШИБКА() (iferror()).

Это финальный вид. Если добавить еще какой-то фильм или новый параметр к существующему - он появится автоматически.

Ссылка на таблицу: https://docs.google.com/spreadsheets/d/1GXVINvbZly6TVXIz2Hwk...

Показать полностью 11
158

Подключение телеграм бота к гугл табличкам (GS3)

Всем ку
Комбинация из ТЛГ и ГТ, простота подключения КМК делает из ГТ офигенный инструмент автоматизации.
Тайм-менеджмент, таск-менеджмент, учёт финансов, объявления, пересылка событий - всё это создается и довольно быстро настраивается. Главное - это становится полезным не только в бизнесе, но и для обычных чатлан.
Пост ориентирован прежде всего на людей, которые только познают ГТ и на первых порах не требует знания гугл скриптов. В этом посте будет только первичная настройка и подключение. В следующих постах рассмотрю всё что описал выше (как трекать время, задачи, финансы и т.д. и как это настроить под себя).

Итак, первое что нам нужно - создать себе ТЛГ бота. Обращаемся к @BotFather

Нам потребуется АПИ токен, он в середине этого сообщения: 1240599492:AAEOpj-G4C0hO3DFGuQ7RkMyX65RxsGFCqo

Дальше нам нужна пустая ГТ. Создаем, заходим в Инструменты / Редактор скриптов.
Скрин для английской версии.

Вставляем туда следующий код:
function doPost(e)
{
var update = JSON.parse(e.postData.contents);
var DOC = SpreadsheetApp.openById("1WvGYnynJkX2srI1G1DD-7b8Qrm2WiWR6QOxzDJRKxXM");
//нам нужен только тип "сообщение"
if (update.hasOwnProperty('message'))
{
var msg = update.message;
var chat_id = msg.chat.id;
var text = msg.text;
var msg_array = msg.text.split(" ");
var date = (msg.date/86400)+25569.125;
var user = msg.from.username;
if (msg_array[0] == "/hello")
{
send("Hello World", chat_id)
}
}
}
function send (msg, chat_id)
{
//Отправляет сообщения в тлг. На вход функции дать сообщение и ID чата, в который нужно провести отправку
var payload = {
'method': 'sendMessage',
'chat_id': String(chat_id),
'text': msg,
'parse_mode': 'HTML'
}
var data = {
"method": "post",
"payload": payload
}
var API_TOKEN = '1240599492:AAEOpj-G4C0hO3DFGuQ7RkMyX65RxsGFCqo'
UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data);
}


Выделенное жирным:
1 - ID гугл таблицы, находится после /d/ :

2 - АПИ токен гугл бота, который мы доставали выше.

По коду - в нем две функции - первая принимает сообщение от бота и работает с единственной командой "/hello". Вторая - отправляет сообщения в чат. В данном случае - в чат из которого пришло сообщение.

Осталась последняя часть - зарегистрировать вебхук. Тут нам поможет эта ссылка:
https://api.telegram.org/bot{API_TOKEN}/setWebHook?url={CURRENT_WEB_APP_URL}
Вместо первых фигурных скобок вставляем всё тот же токен бота, а вместо вторых фигурных скобок нам нужно вставить ссылку на приложение, которые  мы только что сделали, но еще не опубликовали.

Важно - поставить доступ для анонимов и для каждой новой версии выставлять Project version новый или new.
При деплое оно запросит разрешение - даём, после чего получаем заветную ссылку:

В итоге у нас должно получиться следующее:
https://api.telegram.org/bot1240599492:AAEOpj-G4C0hO3DFGuQ7R...
Эту ссылку мы просто вставляем в браузер и переходим по ней. Если не получается - подрубаем ВПН. Получаем следующее:

Вебхук зарегистрирован, всё ок. Пойдем тестить бота.

Подключение бота к табличке успешно произведено.

ЗЫ Бота я удалил, так что этот АПИ-токен уже не действует.

Показать полностью 8
155

Запись на ноготочки через телеграм бота и гугл таблицу (GS4)

Под прошлым постом (Подключение телеграм бота к гугл табличкам (GS3)) прилетел запрос от уважаемого чатланина @Kamikadze.man,

Что ж, сказано сделано. Сделал чуть больше интервал - 30 минут, для читабельности поста.


Важно! По ходу разработки бота принял решение "срезать угол" в одном важном месте. Оно довольно критично, но, признаюсь честно, желание выпустить пост сегодня пересилило желание сделать всё на 100%. Дело в том, что даты, которые гугл скрипт забирает из таблички имеют оч неудобный формат. И вот как раз на этапе приведения этого формата я и срезал угол. Сказываться это будет на том, что пользователь вместо даты 26.05 должен вводить только число 26. И сам код написан в формате МВП, т.е. он минимально работоспособен и не учитывает поведение юзера. Т.е. рассчитан только на то, что пользователь будет действовать четко по инструкции. Если эти два обстоятельства подтолкнут читателя к мысли, что автор -- пацак и заслуживает минуса - значит это будет мне уроком на будущее.


Первым делаем создаем новую гугл таблицу (ГТ). Вот ссылка на неё:

https://docs.google.com/spreadsheets/d/1SOt9ng7UZ3oK6fKXYRPa...

Создаем и подключаем к ней бота. Как это сделать - первая ссылка в посте.


Считаем время приёма полтора часа. Если мастер хочет уйти домой в 19, то в 17:30 можно назначить последний прием.

Что должен делать бот?

1 - Спрашивать у клиента в какой день он хотел бы прийти к мастеру, проверять - если свободные окна в это время.

2 - Получить у клиента время начала приёма и записать его в таблицу.

3 - Сделать это время занятым и не предлагать его следующему клиенту.

Начнём с первой функции.

Самая сложная часть - бот должен вести переписку с клиентом. Т.е. бот задает вопрос, а клиент на него отвечает. Чтобы каждый раз не пользоваться командами (отправкой через /) нужно переключить бота в этот режим. Делается это у botfather:

Наша первая цепочка (Ю: - юзер, Б: - бот)

Ю: Записаться

Б: На какое время хотите записаться?

Ю: Дата

Б: Список свободных окон

Ю: Время

Б: Запись прошла успешно


Чтобы реализовать этот диалог нам нужно хранить состояние каждого чата в таблице. В шапку таблицу добавляем техническое поле Statement, а пользователей будем распознавать по Chat ID.


После того как пользователь отправляет команду "Записаться" -  мы отправляем ему текстовое сообщение и меняем Стейтмент на "Dates", т.е. следующее сообщение от пользователя будет с датой.

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

+ Добавляем в бот команду "Отмена", которая отменяет текущую запись и сбрасывает стейтмент.


Итак к табличке.

Размечаем лист с клиентами:

И лист под календарь

Чтобы заменить единички в календаре на цветовую заливку использую условное форматирование:

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


Теперь как это работает.

И результат в доке:

Второй прогон:

Занятые окна он уже не показывает) И итог:

Ссылка на доку и код (Инструменты / Редактор скриптов). Код получился объёмным и не вижу смысла добавлять его в сам пост.

Отдельно код просто в текстовом файле: https://docs.google.com/document/d/1FOg5YRIauH0C13u-imdTpezU...

https://docs.google.com/spreadsheets/d/1SOt9ng7UZ3oK6fKXYRPa...



Вот и всё, уважаемые чатлане. Готов к критике, если таковая будет и к ответу на вопросы, если таковые будут. Надеюсь, что смог быть кому-то полезен.

Показать полностью 8
136

Диаграмма Ганта в гугл таблицах: гайд для пользователя

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

Диаграмма Ганта

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

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

Состав колонок в шаблоне таблицы

На скрине ниже показано представление диаграммы Ганта в ГТ

Слева представлен список проектов с задачами, справа - продолжительность задач по дням и общее количество дней, выделенное на выполнение задачи.

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


Столбец A содержит флаги, которые могут быть установлены в значения true или false. По-умолчанию, значение ячейки false, но в случае, если задача была выполнена, можно установить флаг в ячейку. Таким образом, если задача была завершена ранее установленного дедлайна, она пропадет из плана в графической части ГТ (далее в посте опишу этот феномен подробнее).


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


В столбце C содержатся задачи, которые нужно выполнить для достижения цели. Списки задач расположены под головной целью.


Столбец D включает в себя приоритет задач. В данном случае приоритет выставляется автоматически по формуле:


=iferror(arrayformula(if(F3:F<>"";if(F3:F-TODAY()<=2;"высокий";if(F3:F-TODAY()<=4;"средний";"низкий"));""));"")


Исходя из формулы, значение “высокий” устанавливается, если до дедлайна осталось 2 дня, “средний” - 4 дня и “низкий” в остальных случаях. Формула может быть подправлена исходя из вашего представления о приоритете.


Столбцы E и F содержат информацию о начале и окончании задачи соответственно. Данные заполняются пользователями. Формату поля присваивается значение “Дата” автоматически при проставлении даты. В дальнейшем при намерении изменить значение ячейки можно кликнуть по ней дважды и выбрать новую дату из календаря.

Начиная с колонки G, в шапке таблицы установлены даты. В данном примере один лист ГТ ограничен одним месяцем, но эти даты можно и продлить. Подробнее про механику добавления дат на видео. Кратко: нужно вставить новые столбцы и скопировать последнюю дату в следующие за ней столбцы.

Последняя колонка содержит количество рабочих дней выделенных под задачу. Считается также автоматически.


Графическая часть таблицы

Как было очевидно до сих пор, в таблице содержится большое количество заливок разных цветов.

Все заливки (помимо шапки) осуществляются инструментами условного форматирования.

На видео также видно, как изменение дат влияет на заливку ячеек в области колонок с датами.

В этом и заключена основная идея этого шаблона.


Далее подробнее про значение каждого цвета в ГТ.


В области списков задач и целей есть 4 цвета.

В колонке с приоритетами возможны 3 опции: зеленый, желтый, красный. Они лишь свидетельствуют об уровне приоритета или срочности задачи и соответствуют названиям: низкий, средний, высокий.

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


В области колонок с датами напротив каждой задачи изображена ее продолжительность по дням.

Здесь также возможны 4 варианта заливки.


Сначала посмотрим на вертикальную заливку.

В столбцах G,H и N,O и так далее заливка бледно-розового цвета свидетельствует о том, что эти даты выпадают на сб и вс. Таким образом, можно увидеть, когда задача попадает на выходные дни и не будет выполняться.

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

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


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

Красный цвет - пройденный этап, голубой - текущий и запланированный.


Вернемся к галочкам в колонке A. Как уже упоминалось, флаг в колонке свидетельствует о том, что задача завершена. Посмотрим, как это выглядит на диаграмме.

В строках 26 и 27 у меня расположены две задачи по майлстоуну Chapter 4, где я подразумеваю изучение темы: просмотреть видео-лекции и выполнить упражнения.

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

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


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

Заливка пропадает для будущего периода времени (голубой цвет), при этом красная заливка будет продолжаться.


Редактируемые столбцы

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


Завершение

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


Ссылка на таблицу https://docs.google.com/spreadsheets/d/1Vx3v9MKnSpl5Pq1GhV7L...

Показать полностью 9 1
131

Учёт финансов с помощью гугл таблиц и телеграмм бота (GS5)

Теплого времени суток, дорогие подписчики. Как обещал ранее - пилю пост про учёт финансов в гугл табличках (далее - ГТ).

Сам пользуюсь такой системой уже больше двух лет и по очень похожей системе веду тайм-трекинг.

Изначальная идея тайм-трекинга через тлг + гт принадлежит не мне. Я получил в своё время уже готовый продукт и его дорабатывал (существенно дорабатывал).

Ближе к делу.

Первое что нужно будет сделать - подключить бота к доке. Как это сделать - читай пост Подключение телеграм бота к гугл табличкам (GS3)


Второе - дать боту возможность читать все сообщения, а не только адресованные ему команды.

Вот код для бота. Он достаточно простой. Всё что он делает - на листе Data Stream создает строку с датой отправки, юзернеймом и текстом.

function doPost(e)

{

var update = JSON.parse(e.postData.contents);

var DOC = SpreadsheetApp.openById("1jVRB2QOasOXaXhm3Q99ZUlgnLpS_td3O3olQ2HGRguk");

var DS = DOC.getSheetByName("Data Stream");

//нам нужен только тип "сообщение"

if (update.hasOwnProperty('message'))

{

var msg = update.message;

var chat_id = msg.chat.id;

var text = msg.text;

var msg_array = msg.text.split(" ");

var date = (msg.date/86400)+25569.125; //.125 справедлива для МСК. Если разница по времени другая - будет другое значение. Чтобы узнать - напиши разницу в часах в гугл таблице и измени формат на Число. Он напишет часы в численном эквиваленте.

var user = msg.from.username;

DS.appendRow([date, user, text]);

}

}


Не забываем после этого заново опубликовать приложение!

Важно приучить себя к определенному виду записи - сначала откуда потратил, потом - на что потратил, потом сумму и потом комментарий. Например

ТКС ЕДА 850 купил гречки

СБЕР Сереже  5000 заплатил штраф


Создаем новую страницу и в a2 пишем следующую формулу:

=ARRAYFORMULA(ЕСЛИ('Data Stream'!C2:C>0;split('Data Stream'!C2:C;" ");))

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

Выделяем всё и создаем сводную таблицу

Настраиваем ёё как на экране и получаем профит.

На этом все) Старался описать самый минимальный функционал чтобы любой чатланин мог как можно быстрее запустить сие чудо. Ссылка на табличку: https://docs.google.com/spreadsheets/d/1jVRB2QOasOXaXhm3Q99Z...


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

Показать полностью 6
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества