1
votes

I found this old thread, but cannot seem to get any of the methods to work.

Issue: I have a spreadsheet that dozens of people use, and over time there have been >200 Filter View's created. I want to mass delete ALL Filter View's from one sheet in the workbook.

I've tried this method after enabling Google Sheets API. It runs, but alas, all the Filter View's remain.

function clearFilter() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ssId = ss.getId();
    var sheetId = ss.getActiveSheet().getSheetId();
    var requests = [{
        "clearBasicFilter": {
        "sheetId": sheetId
        }
    }];
    Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId);
}

Thanks All

Image of Filter Views:

Image of Filter Views

1

1 Answers

2
votes

Issue:

  • You're issuing a clear filter request, which only cleares the current filter

Solution:

  • You must issue a deleteFilterView request instead

Sample Code:

function delFilterViews() {
  var ssId = SpreadsheetApp.getActive().getId();
  Sheets.Spreadsheets.batchUpdate(
    {
      requests: Sheets.Spreadsheets.get(ssId, {
        ranges: 'Sheet1', //Sheet in which filterviews are present
        fields: 'sheets/filterViews/filterViewId',
      }).sheets[0].filterViews.map(function(e) {
        return { deleteFilterView: { filterId: e['filterViewId'] } }; //create a new delete filter view request for each filter view present in sheet1
      }),
    },
    ssId
  );
}

References: