Скрипт для обновления нескольких диапазонов просмотра фильтров листов Google Здесь похожий, но другой вопрос.
У меня есть несколько листов в одной книге, где я хотел бы настроить триггер для обновления диапазонов во всех представлениях фильтров для каждого листа.
Мое лучшее решение - создать файл для каждого листа в книге?





В вашей ситуации, как насчет следующего модифицированного скрипта? В этой модификации я изменил пример скрипта на эта тема.
Прежде чем использовать этот скрипт, пожалуйста, включите Sheets API в расширенных службах Google. И, пожалуйста, установите имена листов, которые вы хотите обновить.
function UpdateFilterView() {
var sheetNames = ["Sheet1", "Sheet3",,,]; // Please set the sheet names you want to update.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = ss.getId();
var sheets = Sheets.Spreadsheets.get(spreadsheetId, { ranges: sheetNames, fields: "sheets(filterViews)" }).sheets;
var requests = sheets.flatMap((s, i) => {
var dataSheet = ss.getSheetByName(sheetNames[i]);
var endRowIndex = dataSheet.getLastRow();
var endColumnIndex = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
return s.filterViews.map(({ filterViewId }) => ({ updateFilterView: { filter: { filterViewId, range: { sheetId, startRowIndex: 0, endRowIndex, startColumnIndex: 0, endColumnIndex } }, fields: "*" } }));
});
if (requests.length == 0) return;
Sheets.Spreadsheets.batchUpdate({ requests: requests }, spreadsheetId);
}
Например, если вы хотите отразить этот сценарий на всех листах электронной таблицы Google, вы также можете использовать следующий образец сценария.
function sample() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = ss.getId();
var sheets = Sheets.Spreadsheets.get(spreadsheetId, { fields: "sheets(filterViews)" }).sheets;
var allSheets = ss.getSheets();
var requests = sheets.flatMap((s, i) => {
var dataSheet = allSheets[i];
var endRowIndex = dataSheet.getLastRow();
var endColumnIndex = dataSheet.getLastColumn();
var sheetId = dataSheet.getSheetId();
return s.filterViews ? s.filterViews.map(({ filterViewId }) => ({ updateFilterView: { filter: { filterViewId, range: { sheetId, startRowIndex: 0, endRowIndex, startColumnIndex: 0, endColumnIndex } }, fields: "*" } })) : [];
});
if (requests.length == 0) return;
Sheets.Spreadsheets.batchUpdate({ requests: requests }, spreadsheetId);
}
@NomadicPeach Спасибо за ответ. Что касается вашего ответа, я добавил еще один пример сценария для отражения сценария на всех листах в электронной таблице Google. Не могли бы вы подтвердить это?
Единственное, что я мог придумать, это программно вытащить все имена листов с помощью var sheetNames = SpreadsheetApp.getActiveSpreadsheet().getSheets() Большое спасибо за это обновление вашего прошлогоднего решения!