【GAS】フィルタビューの削除方法

  • 2021.05.04
  • GAS
【GAS】フィルタビューの削除方法

複数人で使っている場合、フィルタビューが大量になり一括して削除したいことなどはないでしょうか?

Google apps Scriptを使えば一気に削除できます。

以下にやり方を記載します。

事前準備

削除に使うSheets Apiを使えるようにAPIを有効化します。

1. スクリプトエディタを開き、サービスを選択

2. Google Sheets APIを選択肢保存

3. Sheets APIの有効化を確認

以下の画像部分に「Sheets」が記載されていれば有効化されています。

一括削除実装

以下のようなコードになります。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetId = ss.getId();

  //フィルターの一覧を取得
  var filters = Sheets.Spreadsheets.getByDataFilter({
      dataFilters: [],
      includeGridData: false
    }, sheetId);
  
  //削除対象のフィルターと削除APIに投げるリクエスト情報を格納
  var requests = []; 
  for (var i = 0; i < filters.sheets.length; i++) {
    var sheets = filters.sheets[i];
    Logger.log(sheets);
    if(!sheets.filterViews){
      continue;
    }
    for (var j = 0; j < sheets.filterViews.length; j++) {
      requests.push({
        'deleteFilterView': {
          'filterId': sheets.filterViews[j].filterViewId
        }
      });
    }
  }


  //フィルター削除
  if (requests.length > 0) {
    Sheets.Spreadsheets.batchUpdate({'requests': requests}, sheetId);
  }
}

この関数を実行すると全てのフィルタが削除されます。

特定のフィルタを削除

以下のコードになります。今回はフィルタ名に「フィルタ」という文字が入っているフィルタのみ削除するようにしています。

if(sheets.filterViews[j].title.indexOf(‘フィルタ’) > -1){

上記の部分でフィルタビューのフィルタ名を取得しフィルタが含まれているかチェックしています。含まれていたら、requestsリストに情報を格納しています。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetId = ss.getId();

  //フィルターの一覧を取得
  var filters = Sheets.Spreadsheets.getByDataFilter({
      dataFilters: [],
      includeGridData: false
    }, sheetId);
  
  //削除対象のフィルターと削除APIに投げるリクエスト情報を格納
  var requests = []; 
  for (var i = 0; i < filters.sheets.length; i++) {
    var sheets = filters.sheets[i];
    if(!sheets.filterViews){
      continue;
    }
    for (var j = 0; j < sheets.filterViews.length; j++) {
      //フィルタ名にフィルタという名前がつくもののみ削除
      if(sheets.filterViews[j].title.indexOf('フィルタ') > -1){
        requests.push({
          'deleteFilterView': {
            'filterId': sheets.filterViews[j].filterViewId
          }
        });
      }
    }
  }


  //フィルター削除
  if (requests.length > 0) {
    Sheets.Spreadsheets.batchUpdate({'requests': requests}, sheetId);
  }
}

上記を実行すると削除が行われます。

実行結果が以下になります。

まず、実行前の状態を以下としました。

そして、実行後が以下になります。「フィルタ1」と「フィルタ2」が削除され「テスト」のフィルタのみが残っています。

以上になります。試してみてください




GASカテゴリの最新記事