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

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

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

РКН: clck.ru/3F3u9M
Download Telegram
function fillActiveSheet(){
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getDataRange();
var data = dataRange.getValues();
var headers = data.shift();
var newData = fillData_(data);
newData.unshift(headers);
dataRange.setValues(newData);
}

function fillFullActiveDataRange(){
var range = SpreadsheetApp.getActiveRange();
range.setValues(fillData_(range.getValues()));
}

function fillData_(data){
return data.map(function(row){
return row.map(function(item, i){
if(item !== this[i] && item !== '')
this[i] = item;
if(this[i] === undefined)
this[i] = '';
return this[i];
}, this);
}, data.slice(0, 1));
}
Друзья, привет! Сегодня повторяем наш пост о спарклайнах.

Сегодня поговорим о спарклайнах (графиках в ячейках).

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

К счастью, в Таблицах они тоже есть и, в отличие от Excel, реализованы в виде функции (в Excel их нужно вставлять через меню “Вставка”).
Функция так и называется: SPARKLINE.

На гиф посмотрим, как сделать график и гистограмму:
https://goo.gl/IrDT6m

Копируйте таблицу с данными и пробуйте создать спарклайны самостоятельно:
https://goo.gl/fJD0Mk

В документе по ссылке подробная информация по спарклайнам:
https://goo.gl/uZhzYf

И еще один пак с примерами можно найти здесь: https://t.me/google_sheets/324
​​Выводим из массива данные, которые отвечают нашему условию: наличию определенного слова в текстовой строке (с учетом регистра и без), или же наличию одного из нескольких слов

Привет, друзья! Сегодня соединяем функции FILTER и REGEXMATCH и получаем простые и мощные решения (смотрите скриншот).

1) Выведем из массива улиц все улицы, содержащие в названии мотор:
=FILTER(A:A,REGEXMATCH(A:A, C2))

2) Сделаем условие независимым от регистра (будут найдены все варианты написания):
=FILTER(A:A,REGEXMATCH(A:A,"(?i)"&E2))

3) Ну и напоследок ищем сразу по ряду условий:
=FILTER(A:A,REGEXMATCH(A:A,"(?i)мотор|акаДЕМИК|адмиРАЛ|АДВОКАТ"))
​​​​Отправляем СМС из Google Таблицы.

Привет, друзья! В статье в Medium покажем и расскажем, как работать с сервисом по отправке СМС через HTTP API прямо из Google Таблицы.

Все разберем на примере https://smsc.ru, но принцип вы сможете использовать где угодно.
Каникулы - хорошее время, чтобы читать, изучать и осваивать новое.
Собрали для вас несколько неплохих книг и статей по таблицам.

Отличная статья по спарклайнам (на английском, но в основном там скриншоты и формулы) - с интересными примерами.
https://www.benlcollins.com/spreadsheets/sparklines-in-google-sheets/

Google Sheet Functions: A step-by-step guide
https://www.amazon.com/Google-Sheet-Functions-step-step-ebook/dp/B01NBHMZI9
Хорошее руководство по формулам в Таблицах. Все показано на примерах. Особенно их много по QUERY.
5 долларов (электронная книга).

Полезные функции Google Таблиц, которых нет в Excel
https://habr.com/post/331360/
Наша статья на Habr, рассказываем с примерами и скриншотами.

Интересные примеры использования FILTER
https://contributor.pw/post/google-sheets-formulas-filter/
Например, выбираем только женские имена из списка.

Всемогущая функция Query — подробное руководство:
https://netpeak.net/ru/blog/vsemogushchaya-funktsiya-query-podrobnoe-rukovodstvo/
Огромная статья про QUERY от Netpeak

Гайд по возможностям Google Таблиц
https://texterra.ru/blog/google-tablitsy-bolshoy-gayd-dlya-novichkov.html
Тут есть о дополнении для интеграции Google Analytics и Google Таблиц.

Going GAS: From VBA to Google Apps Script
https://www.amazon.com/Going-GAS-Google-Apps-Script-ebook/dp/B01BUK6H6O
Единственное пособие по скриптам Google, в том числе в Таблицах. Больше рассчитана на тех, кто переходит в Таблицы с Excel и умеет писать макросы на VBA, но и начинающим тоже пригодится.

The Ultimate Guide to Google Sheets
https://www.amazon.com/Ultimate-Guide-Google-Sheets-spreadsheet-ebook/dp/B01IMV1NH2
Бесплатная электрокнига. Основы работы с таблицами, с формами, немного про формулы, 50 полезных дополнений и другие полезности (допустим, пример создания CRM-системы в таблицах).

Бесплатный онлайн-курс по скриптам
https://courses.benlcollins.com/p/apps-script-blastoff

Бесплатный онлайн-курс по формулам
https://www.benlcollins.com/advanced-formulas-course/

Курс Рената по таблицам - очередной поток стартует 10-го января
https://skillfactory.ru/google-spreadsheets

Всех с наступающим Новым годом! До встречи после праздников.
ВПР в массиве вместо тысячи CУММЕСЛИМН

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

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

Все просто:
1. Щелчок правой кнопкой на точку данных, которую вы хотите визуально выделить;
2. Цвет элемента;
3. Выбираем цвет на палитре.

Удивительно, что эта опция появилась только сейчас! Напомним, ранее вся серия могла быть только одного цвета.
Работает это для линейчатых, точечных диаграмм, гистограмм и графиков (для графика можно покрасить отдельным цветом точку).
На комбинированных графиках с двумя осями тоже можно красить элементы.

Новость - по ссылке: https://gsuiteupdates.googleblog.com/2019/01/assign-unique-colors-to-chart-elements.html
​​Друзья! Если вы работаете с онлайн-кассой и хотите нам немного помочь, то пожалуйста, заполните форму (там всего два вопроса).
​​​​Очищаем текст от HTML-тегов c помощью функции REGEXREPLACE.

Функция с регулярным выражением:
=REGEXREPLACE(A1;"<.+?>";"")

Раздел про жадную и ленивую квантификацию на wiki.

Друзья, идею поста подал Павел Мрыкин, его канал: @eWorker. Спасибо ему!
​​Незадокументированая особенность QUERY.

Друзья, привет! Мы нашли для вас что-то, чего нет в официальной документации. Кляуза skipping n позволяет оставить в диапазоне вывода каждую n-нную строку

Например,
skipping 3 - выводит каждую третью строку
skipping 5 - каждую пятую

Кляуза пишется в конце запроса - как limit (количество строк, которые выведет запрос) и offset (количество строк сверху, которые мы пропускаем и не выводим).
​​SUMIF для нескольких условий в формуле массива. Объединяем диапазоны с помощью амперсанда (&).

(Пример 1) Считаем сумму по нескольким условиям (одна формула будет работать сразу для ряда ячеек):
=ARRAYFORMULA(SUMIF(A2:A15&B2:B15;E2:E4&F2:F4;C2:C15))

(Пример 2) Сумма по нескольким условиям, заполняем табличку с двумя измерениями:
=ARRAYFORMULA(SUMIF(A2:A&B2:B;E8:E13&F7:H7;C2:C))

Напоминаем синтаксис SUMIF: (диапазон условия; условие; диапазон суммирования).

P. S. Если будете внедрять - напишите нам, как будет работать формула на ваших больших датасетах, нам интересно.
​​Пересчет QUERY по запросу. Лайфхак.

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

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

=ЕСЛИ(ячейка с флажком; QUERY(IMPORTRANGE(1)) ; QUERY(IMPORTRANGE(2)))

Главное - чтобы первая и вторая формулы в ЕСЛИ отличались. Например, можете в первом IMPORTRANGE указать диапазон вида A:E, а во втором - A1:E. Результат будет одинаковый. Но при щелчке на флажок данные будут сразу пересчитываться.
​​Фильтруем две строки от пустых значений и объединяем в одну.

Поехали, разбираем формулу поэтапно:
1) Объединяем две строки в массив:
={A1:F1\A2:F2}

2) Разворачиваем массив в столбец функцией TRANSPOSE / ТРАНСП:
=TRANSPOSE({A1:F1\A2:F2})

3) Добавляем результат в функцию QUERY, фильтруем от пустых ячеек и разворачиваем обратно с помощью TRANSPOSE / ТРАНСП:
=TRANSPOSE(QUERY(TRANSPOSE({A1:F1\A2:F2});"where Col1 is not null"))

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

P.S. В региональных настройках США, Канады и некоторых других создание массива будет выглядеть так: ={A1:F1,A2:F2}
​​Флажки не обязательно использовать активно, меняя в них значение с 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.