Google Таблицы
62.7K subscribers
462 photos
149 videos
8 files
838 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
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Загружаем файлы прямо из Таблицы

Друзья, привет! Презентуем вам Таблицу со скриптом, с помощью нее вы сможете загружать файлы на Google Диск и возвращать в Таблицу ссылку на загруженный файл

Как вы можете это использовать? Допустим, вы торгуете на WB / OZON, делаете в Таблице каталог своих товаров и сразу же загружаете через эту Таблицу фотографии этих товаров.

Таблица (делаем копию)

Ниже просто код:


<form>
<input type="file" name="file" onchange="upload(this.parentNode)" />
</form>
<script>
function upload(e){
const file = e.file.files[0];
const fr = new FileReader();
fr.onload = e => google.script.run.withSuccessHandler(function() { google.script.host.close() })
.upload([[...new Int8Array(e.target.result)], file.type, file.name]);
fr.readAsArrayBuffer(file);
};

</script>



const folderUrl = 'https://drive.google.com/drive/folders/1N9ztzVnG4Xz6AymLN5nByQXc9JOTWdou';

function openSidebar() {
SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile("index"));
};

function upload(e) {
const url = DriveApp.getFolderById(getIdFromUrl(folderUrl)).createFile(Utilities.newBlob(...e)).getUrl();
// SpreadsheetApp.getActiveRange().setValue(url);
SpreadsheetApp.getActiveRange().offset(0, 0, 1, 3).setValues([[url, e[1], e[2]]]);
};

function getIdFromUrl(url) {
return url.match(/[-\w]{25,}/)[0];
}
}



📗 Чат @google_spreadsheets_chat

📕 Оглавление канала

🏄 Заказ работы у нас
Google Таблицы
Загружаем файлы прямо из Таблицы Друзья, привет! Презентуем вам Таблицу со скриптом, с помощью нее вы сможете загружать файлы на Google Диск и возвращать в Таблицу ссылку на загруженный файл Как вы можете это использовать? Допустим, вы торгуете на WB / OZON…
Сделали доработку и теперь скрипт возвращает в ячейки:

- ссылку на загруженный файл
- тип файла
- название

PS Если нужна только ссылка - то закомментируйте 10 строку и раскомментируйте 9 строку.
У вас есть дата, а вы хотите номера/названия месяцев в отдельном столбце (допустим, для сводной, для отчетов, для фильтрации) — 7 вариантов

Самый простой вариант — функция MONTH / МЕСЯЦ. Это число, порядковый номер (3 для марта, 11 для ноября).

С помощью функции TEXT / ТЕКСТ можно получить также вариант с нулем для коротких номеров (03 для марта, но 11 для ноября). С помощью нее же — текстовые варианты (мар. и марта для российских региональных настроек).

Если "марта" вам не нравится и вы хотите использовать абсолютно любые варианты, то можно брать их из диапазона с помощью INDEX. Или из виртуального массива внутри формулы с помощью того же INDEX или VLOOKUP или CHOOSE.

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

Таблица с примерами формул
Напоминаем, друзья: флажки (Checkboxes) в Google Таблицах (и в Excel 365, кстати) можно использовать не только как переключатели значений TRUE / FALSE, но и как визуальное представление этих значений, возвращаемых формулами.

Иначе говоря, если у вас формулы, что-то проверяющие, и выдающие ИСТИНА / ЛОЖЬ, можно вставить "поверх" флажки. Такие флажки уже нельзя переключить пробелом или мышкой.

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

Что это за формулы могут быть? Какие-нибудь проверки значений в ячейке (функции ISEMAIL, ISURL, ISBLANK, ISTEXT и другие), просроченных платежей и прочего, как на скриншоте, нескольких условий сразу через AND / OR.

Или что-нибудь многоэтажное через LAMBDA — например, был ли у сотрудника отпуск в 14 дней подряд (про это читайте тут)
This media is not supported in your browser
VIEW IN TELEGRAM
#Лайфхак❗️Как в Google таблице с помощью условного форматирования сделать границы ячеек


Пост от активного члена нашего сообщества Алексея:


1. Создаём/наполняем данными нашу гугл таблицу как обычно.
2. Сохраняем (скачиваем) нашу таблицу в Excel-формате (меню Файл > Скачать > Microsoft Excel (.xlsx)).
3. Открываем таблицу из п.2 в Excel.
4. Создаём правила Условного форматирования в Excel.
5. Сохраняем (загружаем) таблицу из п.3 в Google Drive.
6. Открываем таблицу из п.4 и сохраняем в формате Гугл Таблиц (меню Файл > Сохранить как таблицу Google)

Профит! Условное форматирование сохранилось!
Конечно, не в полном объёме, например, цвет и толщина границ не сохраняется.

⚠️И главный минус. Данное правило нельзя изменять!

Пример. Мы сделали с помощью УФ несколько границ: между разными группами, слева, справа и внизу...

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
Media is too big
VIEW IN TELEGRAM
Создаем пакет документов для оформления нового сотрудника прямо из Google Таблицы

Коллеги, привет! Наш подписчик Василий поделился с нами своим решением, которое он написал на GAS-скриптах.

Василий решал задачу "у меня есть шаблон в Google Документе, в нём несколько документов, я хочу заполнять нужные мне документы данными из таблицы и сохранять результат в папку, а потом распечатать это и дать сотруднику подписать".


Чтобы все заработало, вы:

1) копируете Таблицу себе
2) вводите на лист "настройки" ссылку на папку, куда будут сохраняться созданные документы
3) копируете себе шаблон, меняете его под себя (если требуется) и также вносите ссылку на него на лист "настройки"
4) далее отмечаете чекбоксами какие документы вы хотите из шаблона оставить и заполнить
5) далее переходите на лист "ввод данных" и заполняете данные по сотруднику и смело нажимаете на кнопку "создать документы!"

И скрипт:

1) копирует ваш шаблон
2) оставляет внутри него только выбранные документы
3) далее меняет теги в шаблоне на то, что вы занесли на лист "ввод данных"
4) переносит шаблон в указанную вами папку и вставляет ссылку на документ, который получился на лист "ввод данных"

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


Таблица со скриптом
Шаблон документов

🔥 Если решение понравится – можете сделать донат Василию по реквизитам, мы передадим.

😈 А будут вопросы – пишите в наш чат.
This media is not supported in your browser
VIEW IN TELEGRAM
Нумеруем только видимые строки

Задача: хотим, чтобы при скрытии строк нумерация менялась: чтобы номера были по порядку только для видимых в текущий момент строк.

Решение:

=SUBTOTAL(103;$B$2:B2)

(если начало в строке два)

Считаем (103 = СЧЁТЗ / COUNTA) значения в каком-то столбце таблицы, но считаем только видимые (не скрытые), так как используем SUBTOTAL / ПРОМЕЖУТОЧНЫЕ.ИТОГИ.

Ссылка вида $B$2:B2 — то есть всегда считаем с начала таблицы до текущей строки (при смещении формулы будет меняться только конец диапазона).
Media is too big
VIEW IN TELEGRAM
Распознаем текст рассказа О`Генри, взяв PDF из интернета с помощью Таблицы

Друзья, в Google Docs есть технология OCR (оптическое распознавание текста). Мы подготовили для вас Таблицу со скриптом и в видео показали, как она умеет "на лету" распознавать текст из pdf / изображений, ссылку на файл мы взяли прямо из интернета.

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


Чтобы все заработало у вас:

1) Делаем копию Таблицы

2) В ячейку листа "config" вставляем URL файла (пойдет PDF, картинка, ссылка может быть как на Google Диск, так и на файл в интернете);

3) Запускаем скрипт кнопкой "GO!", скрипт создаст из заданного файла новый Google Документ с текстом и вставит весь текст из него на лист "OCR";

4) Хотите сразу удалять временный файл – уберите комментарий (//) с 29 строки кода;


📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Итак, до Google таблиц доезжают ссылки на умные таблицы, которые ранее существовали в Excel.

Изначально с появлением таблиц в Google Spreadsheets можно было ссылаться на все данные в столбце:

Таблица[Столбец]


Теперь как в Excel — можно ссылаться на весь столбец вместе с заголовками и итогами:

Таблица[[#ALL],[Столбец]]


На данные и заголовки, но без итогов:

Таблица[[#HEADERS],[#DATA],[Столбец]]


Можно на итоги или заголовки конкретного столбца

Таблица[[#HEADERS],[Столбец]]
Таблица[[#TOTALS],[Столбец]]


На всю строку заголовков или итогов:

Таблица[#HEADERS]
Таблица[#TOTALS]


И все это актуально для ссылок на несколько столбцов, которые теперь тоже работают в Google. Указываем первый и последний столбец через двоеточие:

Таблица[[Первый]:[Последний]]


Строка итогов появится, как только введете какую-нибудь формулу под последней строкой таблицы. В Excel там автоматом появлялись функции SUBTOTAL для расчета по видимым строкам, но можно и обычные функции вроде SUM тоже.
Новость тут

Таблица с примерами
Пост от нашего читателя Алексея Odysseus 


Сегодня у нас не обычный материал, а задачка.

Есть тарифы на электроэнергию: дневной и ночной. Задан период работы электроприбора. Максимальное время работы прибора - 24ч. Посчитать, сколько нужно заплатить за потребленную электроэнергию.

Сразу скажу, задача не на знание редких функция таблиц, а на логическое математическое мышление.

#Лирическое отступление. В чате часто спрашивают:
▸ есть ли какие-то хорошие курсы по таблицам?
▸ как научится писать такие формулы, как Вы?
▸ невероятно, а так можно было?
Из своего опыта, ответственно заявляю:
1. Курсы нужны чтоб быстро и грамотно и усвоить базовые принципы. Если Вы никогда не работали в таблицах, не делали курсовые с большим количеством расчетов, Вам обязательно нужно пройти "базовый курс".
2. Никто и никогда не становится специалистом за пару месяцев. Нужен опыт и практика. Наш чат предоставляет возможность получить и то, и другое!
3. Все сложные механизмы, в том числе и формулы, состоят из сочетания множества простых. Но чтобы уметь сочетать даже простые функции нужно уметь мыслить логически! И сегодня задачка именно на умение думать!



От авторов канала - Алексей, задачка сложная, помоги / подскажи в комментариях, в случае чего
Google Таблицы
Пост от нашего читателя Алексея Odysseus Сегодня у нас не обычный материал, а задачка. Есть тарифы на электроэнергию: дневной и ночной. Задан период работы электроприбора. Максимальное время работы прибора - 24ч. Посчитать, сколько нужно заплатить за потребленную…
И ответ на задачку от её автора, Алексея:


Приведу пример оптимального метода расчета для самого простого варианта.

Дано. 2 временных интервала, заданные началами и концами.
start1 - finish1 и start2 - finish2. Найти начало и конец пересечения интервалов, обозначим их как begin и end.


При условии: start1 < finish1 и start2 < finish2

begin = max (start1; start2)
end = min (finish1; finish2)


На примерах с иллюстрации.

1. start1 = 6; finish1 = 18
start2 = 9; finish2 = 15

begin = max (6; 9) = 9
end = min (18; 15) = 15


2. start1 = 6; finish1 = 18
start2 = 3; finish2 = 15

begin = max (6; 3) = 6
end = min (18; 15) = 15


3. start1 = 6; finish1 = 18
start2 = 9; finish2 = 21

begin = max (6; 9) = 9
end = min (18; 21) = 18
Комбинированная диаграмма: добавляем фон для периода

Хотим подсветить определенный период на диаграмме фоном.

Для этого:
1 к данным добавляем столбец и в те дни, которые должны быть с фоном, добавляем число — в районе максимального значения наших данных. В примере 14 500, потому что максимальная выручка в районе 14 тысяч, то есть 14 500 — высота нашего будущего фона — точно перекроет все значения.

2 Вставляем диаграмму и выбираем тип "Комбинированная".

3 Для второго ряда данных (фона) выбираем тип "с областями". Для самих данных — по вкусу (можно график или — как на скриншоте — столбики).

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

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Google Таблицы
Создаем пакет документов для оформления нового сотрудника прямо из Google Таблицы Коллеги, привет! Наш подписчик Василий поделился с нами своим решением, которое он написал на GAS-скриптах. Василий решал задачу "у меня есть шаблон в Google Документе, в нём…
Сопоставляем список фамилий в Таблице и список файлов в папке, скрипт

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


У нас есть список документов в папке google диска, пусть это военные билеты или паспорта.

Каждый документ лежит в папке диска и имеет название в формате `Фамилия Имя Отчество`.

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


Таблица с примером (делайте копию)

Код отдельно:

function ссылки_ссылки() {
const idFolder = idFromUrl('https://drive.google.com/drive/u/0/folders/17uqPgg09Y3EaJJnkbutmzQfOZqIEMi0b'); // ID папки с файлами
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheets()[0];
const range = sh.getRange(1, 1, sh.getLastRow(), 1);
let values = range.getValues();
const files = DriveApp.getFolderById(idFolder).getFiles(); // забираем все файлы из папки

var filesM = [];

while (files.hasNext()) { // создаём массив [Имя, Url] каждого файла
var file = files.next();
filesM = [...filesM, [file.getName(), file.getUrl()]];
};

values = values.map((x, i) => {
const fileUrl = i == 0 || !x[0] ? '' : filesM.filter(z => new RegExp(x[0]).test(z[0]))[0]?.[1] || 'не найдено';
return [x[0], fileUrl];
});

range.offset(0, 0, values.length, values[0].length).setValues(values);
};

function idFromUrl(url) { // функция для извлечения ID из URL
return url.match(/[-\w]{25,}/)[0];
};



📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Примеры применения ссылок на таблицы в формулах
начало про ссылки в "умных" таблицах тут

Пара примеров того, как можно использовать ссылки на таблицы на практике.

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


=VSTACK(ПерваяТаблица[#ALL]; [Вторая]; ... [ЕщеТаблица])


Если нам надо загрузить умную таблицу из другого файла — засунем ее во второй аргумент IMPORTRANGE. Если нужно с заголовками — опять-таки, добавляем #ALL:


=IMPORTRANGE("ID исходной таблицы"; "УмнаяТаблица[#ALL]")


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

И вот в обоих случаях нам не надо беспокоиться о том, сколько будет строк в таблицах-источниках. Все новые строки соберутся в одну пачку функцией VSTACK или будут импортированы IMPORTRANGE.
Запускаем скрипт ровно в 55 минут

Друзья, мне написал Владислав - у него есть скрипт и он хочет его запускать каждый час в конкретной время (например, в 55 минут каждого часа)

Мы решили помочь и написали скрипт, который

1) запускает нужный нам скрипт;
2) далее проверяет, есть ли скрипт в триггерах проекта, если есть - удаляет этот триггер
3) далее создаёт новый триггер, на следующий час, чтобы тот запустился в введенные в коде минуты (аргумент mins)


function googleSheets() {
setDate(); // запускаем нашу функцию

let fName = arguments.callee.name; // получаем имя текущей функции
let triggers = ScriptApp.getProjectTriggers(); // удаляем триггер с текущей функцией, если он есть
for (let i = 0; i < triggers.length; i++) {
let trigger = triggers[i];
if (trigger.getHandlerFunction() == fName) {
ScriptApp.deleteTrigger(triggers[i]);
};
};

let dt = new Date(); //рассчитываем время для запуска функции в следующий раз
let h = dt.getHours();
let mins = 44; //устанавливаем триггер на следующий час на это время
let newDt = new Date(dt.setHours(h, mins, 0) + 60 * 60 * 1000);
Logger.log(newDt);

ScriptApp.newTrigger(fName) // ставим функцию на триггер
.timeBased()
.at(newDt)
.create();
};

function setDate() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheets()[0];
sh.getRange((sh.getLastRow() || 0) + 1, 1)
.setValue(new Date());
};


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

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
This media is not supported in your browser
VIEW IN TELEGRAM
Парсим данные из веб-страницы в Таблицу скриптами


Добрый День господа!

Я - Василий!

〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Сегодня небольшой, но полезный скрипт, о том, как спарсить данные с сайта на примере сайта о проведении Бильярдных турниров https://fairplay.host/.
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Цель:

Собрать список участников указанных турниров и посчитать сколько раз каждый из участников участвовал в этих турнирах, для дальнейшего награждения лучших.
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Решение:

1. Забираем с первого листа таблицы список ссылок на турниры:

const ss = SpreadsheetApp.getActive();
const spisokTurnirov = ss
.getSheetByName('Список турниров')
.getDataRange()
.getValues()
.slice(1);


2. В коде страницы находим ссылку на API и проходим по всем ссылкам в цикле, формируя список участников с указание их города:

var arr = [];
spisokTurnirov.forEach(x => {
x = x[0].match(/\d{4,}/);
const url = 'https://fairplay.host/api/tournament/details?id=' + x[0];
arr = [...arr, ...pars(url)]
})


3. Создаём объект и считаем количество участником и далее вставляем их на другой лист:

let spr = {}; //создаём пустой объект

arr.forEach(z => {

let iii = spr[z[0]];
!iii ? spr[z[0]] = 1 : spr[z[0]] = iii + 1; // тернарный оператор
});


Делайте копию таблицы, пробуйте, смотрите код, пишите вопросы, с радостью на них ответим!

Полный код в таблице с примером.
Таблица с примером

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Please open Telegram to view this post
VIEW IN TELEGRAM
Проектная диаграмма с выделением выходных отдельным цветом

(или не выходных, а определенных дней недели — тут вы по аналогии справитесь😉)

Создаем два правила условного форматирования с формулами и выбираем разные цвета.

Для рабочих:

=AND(первая дата с закреплением строки>=начало первого этапа с закреплением столбца; первая дата<=конец первого этапа;WEEKDAY(дата;2)>5)


Для выходных (уже не в общем виде, а с ячейками):

=И(D$1>=$B2;D$1<=$C2;ДЕНЬНЕД(D$1;2)<6)


Таблица

📗 Чат @google_spreadsheets_chat
📕 Оглавление канала
🏄 Заказ работы у нас
Наш чат, в котором мы уже 6 лет отвечаем на ваши вопросы: @google_spreadsheets_chat

ПС Кто-то напишет в личку и предложит помочь - не отправляйте деньги, вас обманут

Оглавление нашего канала, где перечислены все наши посты: Оглавление канала
Полезные чатики по теме

Помимо нашего чата советуем чат наших друзей по скриптам: @googleappsscriptrc

И по Таблицам: @google_sheets_pro

👾 Делитесь в комментариях чатами по Таблицам, Excel, программированию, добавим в пост