如何删除Google电子表格中的所有过滤器?

JSt*_*tew 3 google-sheets google-apps-script google-sheets-api

我想编写一个脚本,每天删除一次电子表格中的所有过滤器.

我无法找到有关如何在Google Apps脚本中处理过滤的任何好文档.

如果可能的话,我也愿意使用Python API来做这件事.

小智 11

我通过使用记录宏函数发现了一种新的超级简单的可能性:

spreadsheet.getActiveSheet().getFilter().remove();
Run Code Online (Sandbox Code Playgroud)

注意,之前描述的"简单方法"不再起作用,因为moveTo现在也移动过滤器


Dan*_*ler 7

有可能,有点"作弊":)

(更新的答案:有一个允许的新Google服务,请参阅第2条)


1 - 简单的方法

好吧,我设法这样做:

var row = 1 //the row with filter 
var rowBefore = row 

//insert a row before the filters
Sheet.insertRowBefore(row);
row++; 

//move the filter row to the new row (this will move only content)
var Line = Sheet.getRange(row + ":" + row); 
Line.moveTo(Sheet.getRange(rowBefore + ":" + rowBefore)); 

//delete the old row, which contains the filters - this clears the filters      
Sheet.deleteRow(row); 

//if the row was frozen before deletion, freeze the new row    
Sheet.setFrozenRows(rowBefore); 
Run Code Online (Sandbox Code Playgroud)

2 - 使用表格服务:

(复制自https://issuetracker.google.com/issues/36753410,评论#172)

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);
}
Run Code Online (Sandbox Code Playgroud)

(复制自@ AndreLung的评论如下)

转到"资源",然后选择"高级Google服务",找到"Google表格API并启用.",转到console.cloud.google.com/apis/dashboard并启用"表格API"


3 - 艰难的方式:(保留在这里,因为我在思考之前写了它)

1 - 删除第一行(或过滤器按钮所在的行)

Sheet.deleteRow(1);
Run Code Online (Sandbox Code Playgroud)

2 - 再次插入:)

Sheet.insertRowBefore(1);
Run Code Online (Sandbox Code Playgroud)

3 - 设置标题

Sheet.getRange("A1").setValue("Hi there");
Sheet.getRange("B1").setValue("Here I am Again with no filter");

//alternatively
var LineVals = Sheet.getRange("1:1").getValues(); 
LineVals[0][0] = "Hi there";
LineVals[0][1] = "Here I am again";
LineVals[0][2] = "With no filters";
Sheet.getRange("1:1").setValues(LineVals);
//getValues is meant to keep the array exactly the size of the row
Run Code Online (Sandbox Code Playgroud)

4 - 再次设置线条颜色:

//Cell color                                   
Sheet.getRange("1:1").setBackground('#ff3300');
Run Code Online (Sandbox Code Playgroud)

5 - 设置字体样式:

 //I didn't test these ones....
 Sheet.getRange("1:1").setFontColor....
 Sheet.getRange("1:1").setFontFamily....     
 Sheet.getRange("1:1").setFontSize....
 //Actually there are a lot of font options available....       
Run Code Online (Sandbox Code Playgroud)

6 - 如果之前被冻结,请再次冻结:

Sheet.setFrozenRows(1);
Run Code Online (Sandbox Code Playgroud)

7 - 最后,如果他们有NamedRanges,考虑命名整个列而不是单个单元格,这将保护您的名字不受伤害.