简体   繁体   English

谷歌工作表中的脚本清除,但不删除过滤器

[英]Script in google sheet to clear, but not remove filter

I am completely new in writing scripts for google sheets, so I was hoping some of you could help/guide me a little bit.我在为 google 表格编写脚本方面是全新的,所以我希望你们中的一些人可以帮助/指导我。

So Ideally, I want a script to clear (not remove) ALL filters in my sheet.所以理想情况下,我想要一个脚本来清除(而不是删除)我的工作表中的所有过滤器。 This is, however, complicated for me to do (If some of you have such a script, I would LOVE to see it :) )然而,这对我来说很复杂(如果你们中的一些人有这样的脚本,我很想看到它:))

Instead, I made this one (Used recorder):相反,我做了这个(二手录音机):

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);
};

So my filter is set in Row 5. First I made the above for all columns (I had 20), but the problem is, that the code is very slow :( So now I am using the columns, that I use the most, when filtering, but the code is still slow. Well the worst thing is, that the code is running one column at a time (which we see in the code), and when the code is finish, I end up in the last column.所以我的过滤器设置在第 5 行。首先我为所有列(我有 20 个)制作了上面的内容,但问题是,代码很慢:( 所以现在我使用的是我使用最多的列,当过滤时,但代码仍然很慢。最糟糕的是,代码一次运行一列(我们在代码中看到),当代码完成时,我最终在最后一列。

Can I do something?我可以做点什么吗? I dont want my sheet window keep turning right, when I run the code, and then end up in column M.我不希望我的工作表窗口在我运行代码时一直向右转,然后在 M 列中结束。

I will appreciate any help!我将不胜感激任何帮助! Thanks谢谢

Here is mine.这是我的。 The function does not remove filters.该函数不会删除过滤器。 Instead, it clears them as requested.相反,它会根据要求清除它们。

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')}
}

Reset filters criterea + sort by first column (as default state).重置过滤器标准 + 按第一列排序(作为默认状态)。 And add this action to main menu.并将此操作添加到主菜单。

/** @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
};

To clear all清除所有

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

I, have you tried :我,你有没有试过:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM