Как предотвратить скрытие фильтром определенных строк и заголовков c? - PullRequest
1 голос
/ 26 мая 2020

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

Можно ли исключить из фильтра строку со «всеми сайтами» в столбце D? Мне нужно, чтобы он отображался постоянно, независимо от того, что я выбираю из раскрывающегося списка. перед фильтром: Imgur

моя цель - достичь: выбор, сделанный в раскрывающемся списке, покажет все сайты и те строки, которые содержат то, что было выбрано. Пример: Hub 01 был выбран из раскрывающегося списка. Местоположение в столбце D, которое не включает концентратор 01, будет скрыто. Отображает только строку для всех сайтов и содержит Hub 01. Imgur

function hideRow () {

var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('Risk register'); // the sheet name

var cell2 = sheet.getRange('G2').getValue();

var criteria = SpreadsheetApp.newFilterCriteria().whenTextContains(cell2);
sheet.getFilter().setColumnFilterCriteria(4, criteria);
}

1 Ответ

1 голос
/ 26 мая 2020

Я считаю, что ваша цель следующая.

  • Вы хотите отразить базовый c фильтр в диапазоне «D4: D» на листе Risk register.
  • Вы хотите получить значение для поиска из ячейки «G2».
  • Если значением «G2» является «Весь сайт», вы хотите показать строки, которые являются «Все сайты» в столбец «D».
  • Когда значение «G2» равно «Hub 01», вы хотите отобразить строки, содержащие «Hub 01» и «All site» в столбце «D».

Для этого как насчет этого ответа?

Пункты модификации:

  • Для того, чтобы отразить базовый c фильтр в диапазоне «D4: D », для фильтра установлен диапазон« D3: D ».
  • Чтобы показать строки, в которых есть« Hub 01 »и« All site », используется настраиваемая формула.
    • В данном случае я сослался на эту ветку. Ref
  • Для запуска сценария при выборе раскрывающегося списка используется триггер события OnEdit.
    • В этом случае можно использовать простой триггер.

Измененный скрипт:

Скопируйте и вставьте следующий скрипт в редактор скриптов и сохраните его. И, пожалуйста, измените значение раскрывающегося списка ячейки «G2» на листе Risk register. Таким образом, сценарий запускается.

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  if (sheet.getSheetName() == "Risk register" && range.getA1Notation() == "G2") {
    const value = e.value;
    let criteria = SpreadsheetApp.newFilterCriteria();
    criteria = value.toLowerCase() == "all site"
      ? criteria.whenTextEqualTo(value)
      : criteria.whenFormulaSatisfied(`=REGEXMATCH(D4,"All site|${value}")`);
    const sheetFilter = sheet.getFilter();
    if (sheetFilter) sheetFilter.remove();
    sheet.getRange("D3:D").createFilter().setColumnFilterCriteria(4, criteria.build());
  }
}

Примечание:

  • Этот сценарий запускается триггером события OnEdit. Поэтому, когда вы напрямую запускаете функцию onEdit() редактором скриптов, возникает ошибка. Будьте осторожны.
  • Используйте этот скрипт с V8.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...