Google Таблицы
58.3K subscribers
424 photos
122 videos
4 files
773 links
Работа в Google Таблицах. Кейсы, решения и угар.

контакты:
@namokonov
@r_shagabutdinov
@IT_sAdmin

оглавление: goo.gl/HdS2qn
заказ работы: teletype.in/@google_sheets/sheet_happens
чат: @google_spreadsheets_chat
Download Telegram
​​Флажки не обязательно использовать активно, меняя в них значение с TRUE / ИСТИНА (флажок есть) на FALSE / ЛОЖЬ (флажка нет).
Их можно использовать и для индикации, а не изменения.

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

Добавим формулу, которая будет возвращать значение TRUE / ИСТИНА, когда оба столбца заполнены:
=СЧЁТЗ(B2:C2)=2
(эта формула для примера. Главное - речь о формуле, которая возвращает логическое значение, да/нет, ИСТИНА/ЛОЖЬ)

А далее выделяем диапазон и вставляем флажки (Вставка -> Флажок)
И после этого появятся флажки, которые будут "включены" при выполнении условия. заложенного в формулы. При этом щелчком такие флажки, "под которыми" есть формула, не будут изменяться.

Ссылка на Таблицу с примером.
​​Сегодня гостевой пост:
Изменяем наш Google Calendar с помощью скриптов.


Передаем слово автору:

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

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

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

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

Вот ссылка на скрипт:
https://script.google.com/d/1oDswSXp_UleDXiTFushWnqziHi1Dlkb6x_neteWWKfEnjXttUUIPyRTd/edit?usp=sharing
​​Автоматически создаем фразы по определенным шаблонам в Google Таблицах

Разберем, как с помощью формул в Google Таблицах автоматически создавать фразы по определенным шаблонам, в которые будут подставляться параметры из таблицы.

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

Второй путь - вы можете вообще ничего не гуглить, а воспользоваться функцией IMPORTXML, обратиться к поиску картинок Яндекса (или Google), достать ссылку на изображение оттуда и с помощью IMAGE превратить его в картинку.

Разберем все по пунктам:
1) Формируем ссылку для поиска по картинкам Яндекса:
"https://yandex.ru/images/search?text="&a4 (a4 - ссылка на ячейку с названием товара)

2) Вытаскиваем из веб-страницы поиска все ссылки на изображения:
importxml("https://yandex.ru/images/search?text="&A4;"//img/@src")

3) Оставляем одну ссылку (например, вторую сверху):
index(importxml("https://yandex.ru/images/search?text="&A4;"//img/@src");2)

4) Превращаем ее в картинку (и это итоговая формула):
=IMAGE(index(importxml("https://yandex.ru/images/search?text="&A4;"//img/@src");2))

Ссылка на таблицу.
​​​​​​Подсчет ингредиентов на лету.

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

Формула целиком: =ARRAYFORMULA(QUERY({{F3:F9}\{VLOOKUP(E3:E9;B3:C6;2;0) * G3:G9}};"select Col1, sum(Col2) where Col2>0 group by Col1"))

Расшифровка каждого этапа - на скриншоте.
Таблица с примером
​​Друзья, привет!

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

1) умножаем таблицу с расходом на -1,
=ARRAYFORMULA(F7:G13*-1)
2) текстовые поля вернут ошибку, поэтому оборачиваем умножение в ЕСЛИОШИБКА (IFERROR), возвращая в случае ошибки исходный диапазон: =ARRAYFORMULA(IFERROR(F7:G13*-1;F7:G13))
3) объединяем таблицы с расходом и приходом: =ARRAYFORMULA({B7:C12;IFERROR(F7:G13*-1;F7:G13)})
4) и наконец: полученный массив используем в QUERY, группируем по первому столбцу, суммируя второй: =QUERY(ARRAYFORMULA({B7:C12;IFERROR(F7:G13*-1;F7:G13)});"select Col1, sum(Col2) group by Col1")


Таблица с примером.
Скрипт, загружаем письма вашего GMAIL-аккаунта в Таблицу

Друзья, привет! Мы подготовили для вас скрипт. Он умеет переносить письма из gmail-аккаунта юзера, запустившего скрипт в Таблицу. 

Одна строка — одно письмо, при переносе скрипт делает перенесенные письма прочитанными в почтовом ящике.

Чтобы заработало, вам нужно:
1. скопировать Таблицу со скриптом
2. открыть редактор скриптов > дополнительные функции Google и включить Gmail API
3. заполнить первые три строки в коде: 
— ID таблицы и название листа, туда будут вставляться письма
— Поисковый запрос к почтовому ящику, например 
'after:2019/05/12' - письма после 12 мая
'after:2019/05/12 and is:unread' - после 12 мая и непрочитанные
4. запустить функцию run(), ее можно запускать как руками, так и ставить в расписание на регулярный запуск (изменить > триггеры текущего проекта в редакторе скриптов), письма по вашему запросу будут добавляться в Таблицу

P.S. Синтаксис поискового запроса: https://support.google.com/mail/answer/7190, созданный запрос можете проверить в веб-интерфейсе почты gmail.
Forwarded from CONTRIBUTOR.PW (Alexander Ivanov)
2.gif
13.9 MB
Хорошие новости. Теперь в Таблицах можно обрезать пробелы в строках штатными средствами. Т.н. операция trim доступна из меню https://gsuiteupdates.googleblog.com/2019/05/new-sheets-features-may.html?utm_source=contributor.pw
Forwarded from CONTRIBUTOR.PW (Alexander Ivanov)
1.gif
12.5 MB
Действительно, функция удаления дубликатов в Таблицах должна быть встроенной https://gsuiteupdates.googleblog.com/2019/05/new-sheets-features-may.html?utm_source=contributor.pw
​​ARRAYFORMULA для автоматической нумерации списков.

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

За накопление (за увеличение каждого счетчика на 1) отвечает часть ROW(A:A);"<="&ROW(A:A)

1) Нумерация по одному условию (столбцу):
=ARRAYFORMULA(
COUNTIFs(A3:A9;A3:A9;ROW(A3:A9);"<="&ROW(A3:A9))
)

2) Нумерация по двум условиям (столбцам):
=ARRAYFORMULA(
COUNTIFS(D3:D8;D3:D8;E3:E8;E3:E8;ROW(A3:A8);"<="&ROW(A3:A8))
)

Таблица с примером
Сегодня у нас небольшой лайфхак про применение IFTTT для отправки сообщений с данными из Таблиц от нашего читателя Романа Моисеева. Спасибо Роману!

Зачастую мне необходимо знать всего один показатель из таблицы после заполнения формы и для этого не всегда удобно залезать в таблицу. И вот что я придумал:

Через сервис IFTTT можно сделать так, чтобы данные ячейки после каждого обновления передавались в любой удобной форме практически в любой сервис. В моем случае с расходами я установил себе, что после того, как я вношу трату, мне в Telegram приходит остаток на день. И вот как это работает.
​​Если вспомнить, что дата и время в Google Таблицах - это числа, то мы поймем, что можем без труда генерировать случайные даты и время.

Google Документ с примером
​​Скрипт копирования / фильтрации.

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

Мы написали простой скрипт, который поможет в такой ситуации: 
1) скрипт открывает выбранную Таблицу / лист в ней
2) берет диапазон и фильтрует его по первому столбцу по дате (мы это сделали, чтобы показать, что так можно)
3) очищает лист в другой Таблице
4) и вставляет данные

В скрипте всего несколько строк кода и каждая из них снабжена комментариями, чтобы открыть скрипт   — скопируйте таблицу себе и перейдите в Инструменты → Редактор скриптов.

Таблица со скриптом, которую нужно скопировать

P. S. Чтобы скрипт выполнялся регулярно, например, раз в сутки — идем в Правка → Триггеры текущего проекта и задаем расписание запуска.
Друзья, в Medium рассказываем про третий аргумент в QUERY (заголовки).

=QUERY(диапазон данных;"запрос";заголовки)

P.S. И показываем, как вы можете объединить все ячейки внутри каждого столбца
Последние новости Google Таблиц

— появилась возможность посмотреть историю редактирования любой ячейки
— в новую Google Форму теперь можно переносить вопросы из старой (новость)
— можно открывать XLSX-файлы (и другие форматы документов Office) и изменять прямо на Google Диске (новость)
Последние новости Google Таблиц
​​Заменяем выбранное значение на другое. Сниппет.

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

function sheet_replace(range, search, replace) {
return range.map(function(row) {
return row.map(function(cell) {
return cell == search ? replace : cell
})
})
}


А еще мы добавили наш чат к каналу, теперь вы можете перейти в него просто нажав кнопку "Discuss".
​​Учимся извлекать из текста нужное. База знаний регулярных выражений для REGEXEXTRACT.

Друзья, мы подготовили для вас Таблицу с паттернами регулярных выражений, она поможет достать из текста:
— номер телефона
— электропочту
— какую-то цифру или слово
— вы сможете чуть лучше понять регулярки


А еще можно заменять и проверять, не только доставать. Напоминаем, в Google Таблицах есть три функции для работы с регулярными выражениями: REGEXEXTRACT для извлечения, REGEXMATCH для проверки соответствия и REGEXREPLACE для замены текста.

Таблица сделана силами нашего чата, спасибо: @IT_sAdmin, @mrykin, @avazbek88, Макс Махров.

Если вы хотите добавить примеры своих выражений — просто напишите мне (@namokonov) в лс.
​​ЛЕВЫЙ ВПР (когда искомое значение не в первом столбце)

Если в исходной таблице искомые данные стоят правее тех данных, которые вам нужно возвращать с помощью ВПР / VLOOKUP, можно воспользоваться сочетанием функций ИНДЕКС / INDEX и ПОИСКПОЗ / MATCH (так обычно это решается в Excel).

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

=ВПР(A2;{'Прайс-лист'!B:B \ 'Прайс-лист'!A:A};2;0)

А еще с помощью этой конструкции можно создать массив только из двух столбцов (столбца поиска и столбца, который будет возвращаться) и не использовать внутри ВПР таблицу из двадцати столбцов, что может работать медленно.
Скрипт. Прочитаем, что написано на стикерах.
OCR в Google Docs

Недавно нам потребовалось распознать текст, который был написан на нескольких сотнях стикеров. В Google Документах доступна функция OCR (optical character recognition), ей мы и воспользовались.

Мы нашли скрипт, немного модифицировали его и выкладываем в Таблице с примером.

Работает он так:
1) На листе "config" задаете ID папки на Google Диске с PNG / JPG / PDF и задаете лист, на который будет сохранятся результат. ID папки - часть URL адреса после folder/. Папка должна находиться на вашем Google Диске, так как скрипт будет создавать в ней Doc файлы.

2) Скрипт проходится по всем изображениям в заданной папке, сохраняя их копию в Doc. Внутри Doc будет распознанный текст.

3) Дальше этот текст, ID и URL Документа скрипт вставит в Таблицу.


Чтобы скрипт заработал — активируйте Drive Api в редакторе скриптов (Ресурсы → Дополнительные функции Google)

Таблица со скриптом (файл → создать копию)
Папка со стикерами (сделайте копию, если захотите попробовать скрипт на нашей папке)

Про OCR:
https://habr.com/ru/post/114670/
https://habr.com/ru/post/97173/