Обновить все диапазоны представления фильтра

Есть ли сценарий приложения, который я могу запустить, который будет обновлять диапазоны всех представлений фильтра на листе одновременно? У меня есть сотни просмотров фильтров, и было бы трудоемко делать это вручную.

Все представления фильтров находятся на листе под названием «Данные». Мне нужно изменить диапазон с A1: AB3116 НА A1: AB9011.

Спасибо за любую помощь.

Боюсь, что нет. Не совсем уверен, как включить изменение диапазона, которое мне нужно, в этот скрипт?

comiconor 13.02.2023 23:59

Вы можете указать желаемый диапазон в поле range в updateFilterView запросах. Вы можете указать начальный/конечный индекс строки и начальный/конечный индекс столбца. Вы можете посетить эти ссылки для получения полной информации о запросе. Developers.google.com/sheets/api/reference/rest/v4/spreadshe‌​ets/… Developers.google.com/sheets/api/reference/rest/v4/spreadshe‌​ets/…

George 14.02.2023 01:03

Во-первых, я прошу прощения, что мой ответ не был полезен для вашей ситуации. На ваш вопрос я написал ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш вопрос и это было бесполезно, еще раз прошу прощения.

Tanaike 14.02.2023 03:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите изменить диапазон представлений фильтра.
  • Вы хотите изменить с «A1: AB3116» на «A1: AB9011» всех представлений фильтров на листе «данных».

В этом случае, как насчет следующего примера сценария?

Пример сценария:

Скопируйте и вставьте следующий скрипт в редактор скриптов электронной таблицы, включите 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.

Использованная литература:

Другие вопросы по теме

Похожие вопросы