我对找到一种使用 Google APP 脚本删除给定数量的过滤器 View 的方法非常感兴趣。目前,我有几张工作表,其中有数十个未命名的过滤器 View ,我需要删除它们。我可以手工完成,但这需要几个小时。
经过一些研究,我发现一个代码片段允许删除给定工作表中的所有过滤器 View ,但我想删除一些过滤器 View ,而不是全部。
这是我已经找到的代码片段,由 TheMaster 提供:
function delFilterViews() {
var ssId = SpreadsheetApp.getActive().getId();
Sheets.Spreadsheets.batchUpdate(
{
requests: Sheets.Spreadsheets.get(ssId, {
ranges: 'Sheet1', //Sheet in which filterviews are present
fields: 'sheets/filterViews/filterViewId',
}).sheets[0].filterViews.map(function(e) {
return { deleteFilterView: { filterId: e['filterViewId'] } }; //create a new delete filter view request for each filter view present in sheet1
}),
},
ssId
);
}
我希望脚本工作的方式是删除当前工作表的所有过滤器 View ,其名称以“Filter X”开头,X 可以是从 1 到 100 的数字
我对正则表达式的蹩脚尝试会是这样的
(过滤器)\s\d*
我目前的编程技能不允许我走得更远。
其他人可以帮我解决这个问题吗?
非常感谢,
最佳答案
- 您想要删除事件工作表上的所有过滤器 View 。
- 您想要删除过滤 View 标题前缀为
Filter
的所有过滤 View 。
如果我的理解是正确的,那么下面的示例脚本怎么样?
示例脚本:
function delFilterViews() {
var ss = SpreadsheetApp.getActive();
var ssId = ss.getId();
var get = Sheets.Spreadsheets.get(ssId, {ranges: ss.getActiveSheet().getSheetName(), fields: "sheets(filterViews(filterViewId,title))"});
var resource = get.sheets.reduce(function(ar1, e) {
if ("filterViews" in e) {
var temp = e.filterViews.reduce(function(ar2, f) {
if (/^Filter\s\d*/.test(f.title)) ar2.push({deleteFilterView: {filterId: f['filterViewId']}});
return ar2;
}, []);
Array.prototype.push.apply(ar1, temp);
}
return ar1;
}, []);
if (resource.length > 0) Sheets.Spreadsheets.batchUpdate({requests: resource}, ssId);
}
引用文献:
关于google-apps-script - 使用 Google App 脚本删除一定数量的过滤器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57711096/