Search code examples
google-apps-scriptgoogle-sheetsfilterfilteringcriteria

Problem with FilteringCriteria in Google Apps Script// Sheets


How are you? I'm working on Google Apps Script and what I want to achieve is to set the filter on the selected cells with the criteria I need. However, even though I specify the filter, the desired criteria are not being established. Does anyone know what might be causing this?

Here it's the code:

var headersRange = sheet.getRange("M5:X5");
headersRange.createFilter();

// Filtrar en la columna S5 por valores mayores al 60%
var filterCriteria = SpreadsheetApp.newFilterCriteria().GreaterThan(0.6).build();
var filter = headersRange.getFilter();
filter.setColumnFilterCriteria(19, filterCriteria); // Columna S

// Filtrar en la columna T5 por valores entre -50% y 50%
var filterCriteriaT = SpreadsheetApp.newFilterCriteria()
  .NumberGreaterThan(-0.5)
  .NumberLessThan(0.5)
  .build();
filter.setColumnFilterCriteria(20, filterCriteriaT); // Columna T

// Ordenar la columna S5 de Z a A
headersRange.sort([{column: 19, ascending: false}]);

Filter Criteria

Filter in column S5:S for values ​​greater than 60%

Filter in column T5:T by values ​​between -50% and 50%

Sort column S5:S from Z to A (ascending false)


Solution

  • From your updated question, how about the following sample script?

    Sample script:

    Please set your sheet name.

    function myFunction() {
      const sheetName = "Sheet1"; // Please set your sheet name.
    
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
      const filter = sheet.getFilter();
      if (filter) {
        filter.remove();
      }
      sheet
        .getRange("S5:T")
        .createFilter()
        .setColumnFilterCriteria(19, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(0.6).build())
        .setColumnFilterCriteria(20, SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(-0.5).whenNumberLessThan(0.5).build());
      sheet.getRange("M5:X").sort({ column: 19, ascending: false });
    }
    
    • I'm not sure whether I could correctly understand your expected condition. So, if the above modification was not your expected result, please modify the condition.
      • .whenNumberGreaterThan(0.6) might be .whenNumberGreaterThanOrEqualTo(0.6)?
      • .whenNumberGreaterThan(-0.5).whenNumberLessThan(0.5) might be .whenNumberGreaterThan(0.5).whenNumberLessThan(-0.5) or whenNumberBetween(-0.5, 0.5) or whenNumberBetween(0.5, -0.5)?
    • From your script of headersRange.sort([{column: 19, ascending: false}]); where headersRange is sheet.getRange("M5:X5");, in this case, that is sheet.getRange("M5:X").sort([{column: 19, ascending: false}]); or sheet.getDataRange().sort({column: 19, ascending: false});?

    References: