用于更新多个 Google 表格过滤器视图范围的脚本



我正在尝试使用以下脚本来更新工作表中 50+ 个人过滤器视图的范围。我使用了我在这里找到的以下代码(顺便说一下,这很有帮助!

我唯一的问题是,如果我有每个唯一的过滤器视图 ID,这效果很好。这里有没有一种方法可以修改此脚本以将更新的范围应用于标题为"MY SHEET"的工作表中的所有过滤器视图?

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 电子表格中工作表("我的工作表")的所有过滤视图。
  • 所有筛选器视图的设置都相同。

修改点:

  • 在您的脚本中,工作表"我的工作表"的一个筛选器视图已更新。因此,在这种情况下,需要检索所有筛选器视图的filterViewId
  • 为了检索所有过滤器视图的filterViewId,我在Sheets API中使用了"spreadsheets.get"的方法。

当上述几点反映到您的脚本中时,它将变为如下。

修改后的脚本:

在使用此脚本之前,请在高级 Google 服务中启用 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);
}
  • 在此修改后的脚本中,首先使用"spreadsheets.get"的方法检索所有筛选器视图filterViewId并创建请求正文,然后,请求正文与"spreadsheets.batchUpdate"方法一起使用。

引用:

  • 方法:电子表格.get
  • 方法:电子表格.批处理更新

最新更新