我正在尝试使用以下脚本来更新表格中50多个个人过滤器视图上的范围。我使用了下面的代码,(在此很有帮助!)。
我唯一的问题是,如果我有每个唯一的filterViewId,则此方法效果很好。这里是否有一种方法可以修改此脚本,以将更新后的范围应用于标题为“ 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());
}
我相信您的目标如下。
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”方法一起使用。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句