Скрипт Google Sheets для создания фильтра с видимым значением - PullRequest
0 голосов
/ 04 апреля 2020

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

мой код

function FilterScript() {

  //CREATED BY PUNIT SINGHAL
  //FOR ACTIVATING SPREADSHEETAPP
  var spreadsheet = SpreadsheetApp.getActive();

  //FOR SELECTING SHEET BY ITS NAME
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'), true);

  //FOR CREATING FILTER
  //FILTER SCRIPT STARTS FROM HERE

  //EDIT THE FIELD AS PER REQUIREMENT
  spreadsheet.getRange('A2:Q1002').activate();
  spreadsheet.getRange('A2:Q1002').createFilter();
  var filterColumn = 'L2:L1002';                               //GIVE THE FILTER COLUMN RANGE OR 'F1:F'+spreadsheet.getActiveSheet().getLastRow();
  var visibleValues = ['Punit','Kirti',''];       //GIVE THE REQUIRED VISIBLE VALUES

  //DON'T EDIT THE BELOW CODE OF FILTER
  //FOR GETTING THE FILTER COLUMN NUMBER
  var filterColumnNo = spreadsheet.getActiveSheet().getRange(filterColumn).getColumn();
  //FOR GETTING FILTER COLUMN VALUES
  var filterValues = spreadsheet.getActiveSheet().getRange(filterColumn).getValues();
  //FOR GETTING HIDDEN VALUES
  var hidden = getHiddenValueArray(filterValues,visibleValues);
  //FOR BUILDING FILTER CRITERIA
  var criteria = SpreadsheetApp.newFilterCriteria().setHiddenValues(hidden).build();
  //FLATTENS AND STRIPS COLUMN VALUES OF ALL THE VALUES IN THE VISIBLE VALUE ARRAY
  function getHiddenValueArray(colValueArr,visibleValueArr){
  var flatUniqArr = colValueArr.map(function(e){return e[0];})
  .filter(function(e,i,a){return (a.indexOf(e) == i && visibleValueArr.indexOf(e) == -1); })  //FOR HANDLING NUMERIC AND STRING VALUES
  return flatUniqArr;
  }
  //FOR APPLYING FINAL STEP OF FILTER
  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(filterColumnNo, criteria);
  //FILTER SCRIPT ENDS AT HERE
}

1 Ответ

0 голосов
/ 06 апреля 2020

если есть какой-то текст, но он в нижнем или верхнем регистре, то код не работает

Эта проблема связана с тем, что indexOf () чувствителен к регистру.

Вы можете обойти это ограничение, установив, например, visibleValues и filterValues в нижний регистр с помощью toLowerCase () .

Для этого вы можете пример изменить

var visibleValues = ['Punit','Kirti',''];

на

var visibleValues = ['Punit','Kirti',''].map(e => e.toLowerCase());

и

colValueArr.map(function(e){return e[0];})

на

colValueArr.map(function(e){return e[0].toLowerCase();})

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