Google工作表中的脚本需要清除,但不能删除过滤器

时间:2018-06-20 20:57:00

标签: javascript google-apps-script google-sheets

我在为Google表格编写脚本方面是完全陌生的,所以我希望你们中的一些人能对我有所帮助/指导。

因此,理想情况下,我希望脚本清除(而不是删除)工作表中的所有过滤器。但是,这对我来说很复杂(如果你们中的某些人有这样的脚本,我希望看到它:))

相反,我做了这个(二手录音机):

function Clear_Filter() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(1);
  spreadsheet.getRange('B5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(2);
  spreadsheet.getRange('C5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(3);
  spreadsheet.getRange('G5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(7);
  spreadsheet.getRange('J5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(10);
  spreadsheet.getRange('M5').activate();
  spreadsheet.getActiveSheet().getFilter().removeColumnFilterCriteria(13);
};

所以我的过滤器设置在第5行中。首先,我对所有列进行了上述设置(我有20个),但是问题是,代码非常慢:(所以现在我使用的是列,最多的时候是过滤,但是代码仍然很慢,最糟糕的是,代码一次运行一列(我们在代码中看到),而当代码完成时,我最终进入最后一列。

我可以做点什么吗?我不希望我的工作表窗口在运行代码时继续向右转,然后在M列结束。

我将不胜感激! 谢谢

4 个答案:

答案 0 :(得分:0)

我,你尝试过吗:

function Clear_Filter() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getFilter().remove();
}

答案 1 :(得分:0)

这是我的。该功能不会删除过滤器。而是按要求清除它们。

function clearFilter(sheet) {
  sheet = SpreadsheetApp.getActiveSheet(); //for testing purpose only
  var filter = sheet.getFilter();
  if (filter !== null) {  // tests if there is a filter applied
    var range = filter.getRange(); // prevents exception in case the filter is not applied to all columns
    var firstColumn = range.getColumn();
    var lastColumn = range.getLastColumn();
    for (var i = firstColumn; i < lastColumn; i++) {
      filter.removeColumnFilterCriteria(i);
    }
  Logger.log('All filters cleared')
  }
  else {Logger.log('There is no filter')}
}

答案 2 :(得分:0)

重置过滤条件+按第一列排序(作为默认状态)。 并将此操作添加到主菜单。

/** @OnlyCurrentDoc */

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [
    {name: "Reset filters", functionName: "ResetFilters"},
  ];
  ss.addMenu("Custom actions", menuEntries); // add to main menu
}

function ResetFilters() {
  var spreadsheet = SpreadsheetApp.getActive();
  var lastColumn = spreadsheet.getActiveSheet().getLastColumn();
  var filter = spreadsheet.getActiveSheet().getFilter();
  var criteria = SpreadsheetApp.newFilterCriteria().build(); 
  for (var i = 1; i <= lastColumn; i++) {
    filter.setColumnFilterCriteria(i, criteria);
  }
  filter.sort(1, true); // remove this line for disable setting of sorting order
};

答案 3 :(得分:0)

全部清除

`function turnOffFilter(sheet) {
        for (var index = 1; index < sheet.getLastColumn(); index++) {
          if (sheet.getFilter().getColumnFilterCriteria(index)) {
            sheet.getFilter().removeColumnFilterCriteria(index);
          }
        }
    }`