[英]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.