google-apps-script - 使用 Google App Scripts 移除一定数量的过滤器视图
问题描述
我对找到一种使用 Google APPs 脚本删除给定数量的过滤器视图的方法非常感兴趣。目前,我有几张表,其中包含需要删除的数十个未命名的过滤器视图。我可以手动完成,但这需要我几个小时。
在做了一些研究之后,我发现了一个代码片段,它允许删除给定工作表中的所有过滤器视图,但我想删除一些过滤器视图,而不是全部。
这是我已经找到的代码片段,由 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”开头的当前工作表的所有过滤器视图 X 可以是 1 到 100 之间的数字
我对正则表达式的糟糕尝试将是这样的
(Filter)\s\d*
我目前的编程技能不允许我走得更远。
其他人可以帮我解决这个问题吗?
非常感谢,
解决方案
- 您要删除活动工作表上的所有过滤器视图。
- 您想删除过滤视图标题前缀为 的所有过滤视图
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);
}
参考:
推荐阅读
- python - 如何安排数据集进行多变量分类?
- python - 直接打开/加载图像为 numpy ndarray
- c# - 将二进制文件添加到存档
- regex - 正则表达式 vb.net ismatch 总是返回 true
- spring - Spring 2.0.0-RELEASE ConfigurationProperties 绑定不起作用
- docker - docker无法访问主机可以访问的内网
- html - 最大高度:img 的 100% 在嵌套 div 中不起作用
- jquery - Ajax 加载在浏览器选项卡中打开内容
- actions-on-google - 如何在 actions-on-google 中发送带有跟进的消息
- apache-kafka - 从 Kafka 中删除空主题