google-apps-script - 用于更新多个 Google 表格过滤器视图范围的脚本
问题描述
我正在尝试使用以下脚本来更新表格中 50 多个个人过滤器视图的范围。我使用了在此处找到的以下代码(顺便说一句,非常有帮助!)。
我唯一的问题是,如果我有每个唯一的 filterViewId,这会很好。这里是否有一种方法可以修改此脚本以将更新的范围应用于标题为“我的工作表”的工作表中的所有过滤器视图?
function UpdateFilterView() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName('MY SHEET');
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var filterSettings = {
"filterViewId": "1099738202",
"range":{
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": lastRow,
"startColumnIndex": 0,
"endColumnIndex": lastColumn
}
};
var requests = [{
"updateFilterView":{
"filter": filterSettings,
"fields": "*",
}
}];
Sheets.Spreadsheets.batchUpdate({"requests":requests}, ss.getId());
}
解决方案
我相信你的目标如下。
- 您想使用 Google Apps 脚本更新 Google 电子表格中工作表(“MY SHEET”)的所有过滤视图。
- 所有过滤视图的设置都是相同的。
修改点:
- 在您的脚本中,更新了工作表“MY SHEET”的一个过滤视图。所以在这种情况下,需要检索
filterViewId
所有过滤视图。 - 为了检索
filterViewId
所有过滤视图,我使用了 Sheets API 中的“spreadsheets.get”方法。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
在使用此脚本之前,请在 Advanced Google services 中启用 Sheets API,并启用 V8 运行时。
function UpdateFilterView() {
var sheetName = "MY SHEET"; // Please set the sheet name.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var dataSheet = ss.getSheetByName(sheetName);
var lastRow = dataSheet.getLastRow();
var lastColumn = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
var spreadsheetId = ss.getId();
var filterViews = Sheets.Spreadsheets.get(spreadsheetId, {ranges: [sheetName], fields: "sheets(filterViews)"}).sheets[0].filterViews;
var requests = filterViews.map(e => ({
updateFilterView: {
filter: {
filterViewId: e.filterViewId,
range: {sheetId: sheetId, startRowIndex: 0, endRowIndex: lastRow, startColumnIndex: 0, endColumnIndex: lastColumn}
},
fields: "*",
}
}));
Sheets.Spreadsheets.batchUpdate({requests: requests}, spreadsheetId);
}
- 在这个修改后的脚本中,首先
filterViewId
使用“spreadsheets.get”方法检索所有过滤视图并创建请求体,然后使用“spreadsheets.batchUpdate”方法使用请求体。
参考:
推荐阅读
- java - 如何防止 eclipse/jface/swt 应用程序闪烁
- javascript - 如何使用Javascript更改树枝循环中的标题背景
- mongodb - PyMongo 给客户错误的用户信用?
- javascript - 如何使用 jQuery 存储和重用本地存储数据?
- java - 在不影响时间的情况下减去天数
- javascript - Javascript隐藏按钮点击按钮
- asynchronous - 如何使用 ESP-IDF 设置异步 Web 服务器?
- flutter - 如何在 Firebase 实时数据库中存储多个数据并将其合并到一个引用中
- r - 如何智能编写一个R函数?
- javascript - 在 Google Earth Engine 上获取图像统计表