使用 Google 应用脚本删除一定数量的过滤视图
Removing a certain number of filter views with Google App Scripts
我非常想找到一种使用 Google APPs 脚本删除给定数量的过滤器视图的方法。目前我有几个 sheets,其中有几十个我需要删除的未命名过滤器视图。我可以手工完成,但这需要几个小时。
经过一些研究,我发现了一个代码片段,它允许删除给定 sheet 中的所有过滤视图,但我想删除一些过滤视图,而不是全部。
这是我已经找到的代码片段,由 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
);
}
我希望脚本的工作方式是删除名称以 "Filter X" 开头的当前 sheet 的所有筛选视图 X 可以是 1 到 100 之间的数字
我对正则表达式的拙劣尝试是这样的
(Filter)\s\d*
我目前的编程技能不允许我比这更进一步。
其他人可以帮我解决这个问题吗?
非常感谢,
- 您想删除活动 sheet 上的所有筛选视图。
- 您想移除所有过滤视图标题前缀为
Filter
的过滤视图。
如果我的理解是正确的,下面的示例脚本怎么样?
示例脚本:
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 脚本删除给定数量的过滤器视图的方法。目前我有几个 sheets,其中有几十个我需要删除的未命名过滤器视图。我可以手工完成,但这需要几个小时。
经过一些研究,我发现了一个代码片段,它允许删除给定 sheet 中的所有过滤视图,但我想删除一些过滤视图,而不是全部。
这是我已经找到的代码片段,由 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
);
}
我希望脚本的工作方式是删除名称以 "Filter X" 开头的当前 sheet 的所有筛选视图 X 可以是 1 到 100 之间的数字
我对正则表达式的拙劣尝试是这样的
(Filter)\s\d*
我目前的编程技能不允许我比这更进一步。
其他人可以帮我解决这个问题吗?
非常感谢,
- 您想删除活动 sheet 上的所有筛选视图。
- 您想移除所有过滤视图标题前缀为
Filter
的过滤视图。
如果我的理解是正确的,下面的示例脚本怎么样?
示例脚本:
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);
}