Есть ли сценарий приложения, который я могу запустить, который будет обновлять диапазоны всех представлений фильтра на листе одновременно? У меня есть сотни просмотров фильтров, и было бы трудоемко делать это вручную.
Все представления фильтров находятся на листе под названием «Данные». Мне нужно изменить диапазон с A1: AB3116 НА A1: AB9011.
Спасибо за любую помощь.
Боюсь, что нет. Не совсем уверен, как включить изменение диапазона, которое мне нужно, в этот скрипт?
Вы можете указать желаемый диапазон в поле range
в updateFilterView
запросах. Вы можете указать начальный/конечный индекс строки и начальный/конечный индекс столбца. Вы можете посетить эти ссылки для получения полной информации о запросе. Developers.google.com/sheets/api/reference/rest/v4/spreadsheets/… Developers.google.com/sheets/api/reference/rest/v4/spreadsheets/…
Во-первых, я прошу прощения, что мой ответ не был полезен для вашей ситуации. На ваш вопрос я написал ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш вопрос и это было бесполезно, еще раз прошу прощения.
Я считаю, что ваша цель заключается в следующем.
В этом случае, как насчет следующего примера сценария?
Скопируйте и вставьте следующий скрипт в редактор скриптов электронной таблицы, включите Sheets API в расширенных сервисах Google и сохраните скрипт.
Пожалуйста, подтвердите sheetName
и obj
. В этом примере используется предоставленная вами информация.
function myFunction() {
var sheetName = "data"; // This is from your question.
var obj = [{ before: "A1:AB3116", after: "A1:AB9011" }]; // This is from your question.
// Retrieve spreadsheet and sheet.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = ss.getId();
var sheet = ss.getSheetByName(sheetName);
var sheetId = sheet.getSheetId();
// Convert a1Notation to gridRange.
var o = obj.map(({ before, after }) =>
[before, after].map(r => {
var rng = sheet.getRange(r);
var rowStart = rng.getRow() - 1;
var rowEnd = rowStart + rng.getNumRows();
var colStart = rng.getColumn() - 1;
var colEnd = colStart + rng.getNumColumns();
return { sheetId, startRowIndex: rowStart, endRowIndex: rowEnd, startColumnIndex: colStart, endColumnIndex: colEnd };
})
);
// Create request body for using the batchUpdate of Sheets API.
var filterViews = Sheets.Spreadsheets.get(spreadsheetId, { ranges: [sheetName], fields: "sheets(filterViews)" }).sheets[0].filterViews;
var requests = filterViews.reduce((ar, { range, ...e }) => {
var check = o.find(([{ startRowIndex, endRowIndex, startColumnIndex, endColumnIndex }]) => range.startRowIndex == startRowIndex && range.endRowIndex == endRowIndex && range.startColumnIndex == startColumnIndex && range.endColumnIndex == endColumnIndex);
if (check) {
ar.push({ updateFilterView: { filter: { filterViewId: e.filterViewId, range: check[1] }, fields: "*" } });
}
return ar;
}, []);
// Reuest Sheets API using the created request body.
if (requests.length == 0) return;
Sheets.Spreadsheets.batchUpdate({ requests }, spreadsheetId);
}
Когда этот сценарий запускается, представления фильтра извлекаются из листа «данных». И диапазон A1:AB3116
ищется в полученных представлениях фильтра, и когда он найден, диапазон изменяется на A1:AB9011
и обновляется представления фильтра.
В этом примере, когда вы меняете несколько диапазонов, вы можете использовать их в obj
.
Отвечает ли это на ваш вопрос? Скрипт для обновления нескольких диапазонов просмотра фильтров Google Sheet