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

Мы ведь смотрим на данные в таблице, чтобы прийти к каким-то выводам на их основе, правильно? И, как правило, хотим увидеть как одни показатели влияют на другие, выявить новые взаимосвязи или какие-то критические значения.

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

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

Создание временного фильтра в гугл таблице
Вот так создаются индивидуальные фильтры (filter views).
Когда такой фильтр включен у пользователя, то видно характерную рамку, данные фильтра, его название и диапазон, на который распространяется фильтр views.

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

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

				
					function updatedFiltersRange() {
    const ss = SpreadsheetApp.getActive();
    const ordersSheetName = 'ЗАКАЗЫ'; //Здесь нужно указать свой лист
    const sheet = ss.getSheetByName(ordersSheetName);
    const sheetsLastRow = sheet.getLastRow();
    const ssId = ss.getId();

    const updatedFilterViews = Sheets.Spreadsheets.get(ssId)
        .sheets.find(sheet => sheet.properties.title == ordersSheetName)
        .filterViews
        .reduce((acc, filterView) => {
            filterView.range.endRowIndex = sheetsLastRow;
            acc.push({
                'updateFilterView': {
                    filter: filterView, fields: 'range'
                }
            });
        return acc
    }, []);

  Sheets.Spreadsheets.batchUpdate({ requests: updatedFilterViews }, ssId)
  ss.toast('Диапазон всех фильтров обновлен.');
  return true
}
				
			

И так, для того чтобы не задумываться о том, что в фильтр попадут ненужные строки, нужно просто добавить это скрипт в таблицу, заменить имя листа на своё, а затем настроить запуск по времени или по событию открытия таблицы (инструкция как запускать гугл скрипт автоматически) или просто добавить кнопку для запуска скрипта (инструкция).

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

5 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
5 месяцев назад

Выдает ошибку

ReferenceError: Sheets is not defined
updatedFiltersRange@ Код.gs:8

Сергей
Сергей
5 месяцев назад
Ответить на  Dmitriy

Теперь ошибка:

TypeError: Cannot read properties of undefined (reading ‘reduce’)
updatedFiltersRange@ Код.gs:11

5
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x