Применение пользовательского фильтра с использованием GAS (реализация функции поиска по таблице) - PullRequest
0 голосов
/ 25 января 2020

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

Я очень близок к ожидаемому результату, используя приведенный ниже код (ожидаемый результат - автоматическая фильтрация таблицы критерии пользователя, введенные в ячейку B2), однако фильтр, похоже, на самом деле не применяется.

Вот что я вижу при запуске текущего скрипта: - onEdit обнаруживает изменение ячейки B2 - Фильтр очищается от любых существующих критериев - Новый фильтр (для заголовка в ячейке B4) создается с использованием (определенных пользователем) критериев из ячейки B2 - Фильтр не применяется. Пользователь должен вручную открыть фильтр и нажать «применить»

Очевидно, что выделение жирным шрифтом не должно происходить. Необходимо автоматически применить.

function onEdit(evt)
{
  var range = evt.range;

  if (range.getRow() == 2 && range.getColumn() == 2)
  {
    ClearFilter();
    Utilities.sleep(200);
    ApplyFilter();
  }
  else
  {
    Logger.log("Edit out of range");
  }
}


function ClearFilter() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B4').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(2);
}


function ApplyFilter() 
{
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B4').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .whenTextContains('=INDIRECT("BWLRankings!B2")')
  .build();
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(spreadsheet.getActiveRange().getColumn(), criteria);
};

1 Ответ

2 голосов
/ 25 января 2020

Проблема с исходным кодом заключается в том, что вы устанавливаете неправильный тип критериев фильтра. Если мы посмотрим на доступные методы FilterCriteriaBuilder, отметим, что существует метод whenFormulaSatisfied.

Поскольку '=INDIRECT("BWLRankings!B2")' - это формула , а не простой текст / цифра c значение , вы должны использовать его вместо whenTextContains . Ваш исходный фильтр действительно применялся, но поскольку никакие значения ячеек в столбце не содержали буквальный текст =INDIRECT("BWLRankings!B2"), ни одна ячейка не была отфильтрована.

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